xLua作为企鹅这个大厂开源出来的unity热更新技术,从面世就受到了广泛的关注,他的“开发使用C#,运行使用C#,有bug了下发Lua补丁替代”让我很感兴趣。非常适合比如已经开发大半使用C#开发的项目,若改为tolua等热更技术,费时又费力,而xLua则可以很好地打上标记,便可以在之后的项目中实现热更。这也是我看好xLua的原因。于是,就从零开始一点点踩坑吧。
这是我C#中的一个类型:
using UnityEngine;
using XLua;
using System;
[LuaCallCSharp]
public class TestModel : MonoBehaviour
{
public int f1 = 2;
public int f2 = 4;
public void Show()
{
print("Lua Call CS 成功!");
}
public void Show2(string s)
{
print(s);
}
public int Add(int a, int b)
{
print("ADD 成功!");
return a + b;
}
public void RefInt(ref int a)
{
a = 5;
}
public int RefIntReturn(ref int a)
{
a = 5;
return 0;
}
public void OutInt(out int a)
{
a = 3;
}
public Action<string> m_delegate = (str) => { print("unity + " + str); };
}
性,方法
访问成员属性和方法时,先要实例化类型local testModel=CS.TestModel()--获取对象
testModel.f1=12 --设置成员属性
local temp=testModel.f2 --读取成员属性
testMode:Add(testModel.f1,temp)--成员方法
xlua支持(通过派生类)访问基类的静态属性,静态方法,(通过派生类实例)访问基类的成员属性,成员方法。
ref和out关键字
local num=2--私有变量
local result1=testModel:RefInt(2)
print(result1)--result1为5
local num=2--私有变量 result2=testModel:OutInt(2) print(result2)--result1为3
复杂的方法
local num=2
local result3,result4=testModel.RefIntReturn(
num)
print(result3)--第一个为return的返回值0
print(result4)--第二个为ref的num=5