本文主要是介绍xLua Lua访问C#注意事项(七),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 调用成员方法
注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法
loacl camera = CS.UnityEngine.GameObject.Find("Main Camera")
--冒号语法
camera:GetComponent("Camera")
--点语法
camera.GetComponent(camera,"Camrea")
- xlua支持子类访问父类的静态属性、静态方法
- xlua支持子类实例访问父类的成员属性、成员方法
- lua支持多个返回值,C#只有一个返回值,但是C#支持传递多个out、ref参数,在C#中可以使用ref和out来接受lua的多返回值
--[Lua--]
function luaAction(a,b,c)return a,a+b,c
end--[C#]
[CSharpCallLua]
delegate int CSAction(int a, int b, ref int resa, out int resb);var testAction = luaEnv.Global.Get<CSAction>("luaAction");int resa = 100;int resb;int value= testAction (45,67,ref resa, out resb);print(value);print(resa);print(resb);testAction = null;
- xlua支持方法重载,直接通过不同的参数类型访问
test:TestAction()
test:TestAciton(1)
test:TestAction("a")
- xlua调用C#方法时,如果C#方法的形参中带有默认值,不传值时,会按默认值传递
- 扩展方法,C#中定义了扩展方法,lua中可以直接使用
- lua不支持泛型方法,建议在C#中封装后使用
- xlua调用C#的枚举,需要在C#定义枚举时,加上[CSharpCallLua]特性
//C#
[CSharpCallLua]
public enum TestEnum
{One,Two,Three
}
--lua
CS.TestEnum.One
- xlua调用C#委托与调用C#的方法没有区别
//C#
[CSharpCallLua]
public delegate void TestDelegate();public TestDelegate testDelegate;luaEnv = new LuaEnv();
luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
testDelegate = luaEnv.Global.Get<TestDelegate>("luaAction");
testDelegate?.Invoke();--lua
function luaAction()print("委托")
end
- xlua调用C#event并添加事件
//C#
[CSharpCallLua]
public delegate void TestEvent();public event TestEvent testEvent;luaEnv = new LuaEnv();
luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
testEvent?.Invoke();
luaEnv.Dispose();--lua
function luaAction()print("事件")
endlocal GameObject = CS.UnityEngine.GameObject
local obj = GameObject.Find("GameObject")
local manager = obj:GetComponent("Manager")
manager:testEvent('+',luaAction)
- xlua获取C#类型
typeof(CS.UnityEngine.GameObject)
这篇关于xLua Lua访问C#注意事项(七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!