Я тоже новичок и хотел бы высказать свое мнение о Lua. В процессе изучения Lua Lua, вызываемый Unity, может вызывать соответствующие свойства, методы и методы модуля (что эквивалентно классу в C#) через делегаты, структуры, классы и интерфейсы (если есть другие, лучшие способы, пожалуйста, объясните мне).
//结构体
public struct Son
{
public int Id;
public string s;
}
//类
public class Son1
{
public int Id;
public string s;
}
//接口
public interface Son2
{
public int Id { get; set; }
public string s { get; set; }
public void Func();
}
//委托
public delegate int id;
public delegate int Obj(object a, object b);
По моему мнению, использование интерфейсов должно быть наиболее полезным среди этих четырех методов.Я также рекомендую использовать интерфейсы для извлечения данных. Когда я использую другие методы для получения методов в модуле, появляются небольшие ошибки, поэтому, если вы хотите получить методы в классе, я рекомендую вам использовать интерфейсы здесь. Другие небольшие данные удобнее всего получать с помощью структур.
Использование интерфейсов: получение методов в классах
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
[CSharpCallLua]//一定要添加特性,里面的属性名称和方法名称也必须和Lua里面的相同
public interface Open
{
public string Id { get; set; }
public string Pwd { get; set; }
void GetUI();
}
public class Te: MonoBehaviour
{
LuaEnv lua;
Open o;
void Start()
{
lua = new LuaEnv();
lua.AddLoader(FileLoading);//加载器
lua.DoString("require('M')");//获取
o = lua.Global.Get<Open>("A");
print(o.Id);
print(o.Pwd);
o.GetUI();
}
byte[] FileLoading(ref string name)//读文件的方式读取Lua内容
{
string s = Application.dataPath + "/Lua/" + name + ".lua";
return File.ReadAllBytes(s);
}
void OnDestory()
{
lua.Dispose();
}
}
Луа-часть:
A={
Id=1001,
Pwd='密码',
GetUI=function()
print("获取到类里面的方法")
end
}
Результат вывода:
Метод привлечения делегата
[CSharpCallLua]//委托获取,不用特性也可以
public delegate void D();
public class Te : MonoBehaviour
{
LuaEnv lua;
void Start()
{
lua = new LuaEnv();
lua.AddLoader(FileLoading);
lua.DoString("require('M')");
D d = lua.Global.Get<D>("Out");
d();
}
byte[] FileLoading(ref string name)
{
string s = Application.dataPath + "/Lua/" + name + ".lua";
return File.ReadAllBytes(s);
}
void OnDestory()
{
lua.Dispose();
}
Lua-скрипт:
function Out()
print("外面的方法")
end
Результат вывода: