• xLua Lua访问C#注意事项(七)


    • 调用成员方法
      注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法
    1. loacl camera = CS.UnityEngine.GameObject.Find("Main Camera")
    2. --冒号语法
    3. camera:GetComponent("Camera")
    4. --点语法
    5. camera.GetComponent(camera,"Camrea")
    • xlua支持子类访问父类的静态属性、静态方法
    • xlua支持子类实例访问父类的成员属性、成员方法
    • lua支持多个返回值,C#只有一个返回值,但是C#支持传递多个out、ref参数,在C#中可以使用ref和out来接受lua的多返回值
    1. --[Lua--]
    2. function luaAction(a,b,c)
    3. return a,a+b,c
    4. end
    5. --[C#]
    6. [CSharpCallLua]
    7. delegate int CSAction(int a, int b, ref int resa, out int resb);
    8. var testAction = luaEnv.Global.Get("luaAction");
    9. int resa = 100;
    10. int resb;
    11. int value= testAction (45,67,ref resa, out resb);
    12. print(value);
    13. print(resa);
    14. print(resb);
    15. testAction = null;
    • xlua支持方法重载,直接通过不同的参数类型访问
    1. test:TestAction()
    2. test:TestAciton(1)
    3. test:TestAction("a")
    • xlua调用C#方法时,如果C#方法的形参中带有默认值,不传值时,会按默认值传递
    • 扩展方法,C#中定义了扩展方法,lua中可以直接使用
    • lua不支持泛型方法,建议在C#中封装后使用
    • xlua调用C#的枚举,需要在C#定义枚举时,加上[CSharpCallLua]特性
    1. //C#
    2. [CSharpCallLua]
    3. public enum TestEnum
    4. {
    5. One,
    6. Two,
    7. Three
    8. }
    9. --lua
    10. CS.TestEnum.One
    • xlua调用C#委托与调用C#的方法没有区别
    1. //C#
    2. [CSharpCallLua]
    3. public delegate void TestDelegate();
    4. public TestDelegate testDelegate;
    5. luaEnv = new LuaEnv();
    6. luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
    7. testDelegate = luaEnv.Global.Get<TestDelegate>("luaAction");
    8. testDelegate?.Invoke();
    9. --lua
    10. function luaAction()
    11. print("委托")
    12. end
    • xlua调用C#event并添加事件
    1. //C#
    2. [CSharpCallLua]
    3. public delegate void TestEvent();
    4. public event TestEvent testEvent;
    5. luaEnv = new LuaEnv();
    6. luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
    7. testEvent?.Invoke();
    8. luaEnv.Dispose();
    9. --lua
    10. function luaAction()
    11. print("事件")
    12. end
    13. local GameObject = CS.UnityEngine.GameObject
    14. local obj = GameObject.Find("GameObject")
    15. local manager = obj:GetComponent("Manager")
    16. manager:testEvent('+',luaAction)
    • xlua获取C#类型
    typeof(CS.UnityEngine.GameObject)
  • 相关阅读:
    MYSQLg高级------聚簇索引和非聚簇索引
    JS-谈谈你所理解的闭包
    旋转数组最小数字、数字在升序数组中出现的次数
    网络连接错误错误代码103怎么解决
    计算机网络 - 应用层 选择复习题
    使用node读取.xlsx表格数据并另存为JSON格式
    【LeetCode】41. 缺失的第一个正数
    Python实现---南邮离散数学实验三:盖住关系的求取及格的判定
    canvas绘制动态视频并且在视频上加上自定义logo
    list模拟实现
  • 原文地址:https://blog.csdn.net/Liu_ChangC/article/details/134312722