热更新03_ULua Day0826
Ulua的使用流程一般为:
1.实例化LuaState对象(new LuaState())
LuaState l = new LuaState( )
string str = "print('hello world 世界')";//代码
2.加载Lua代码
LuaState. DoString(str)
a.可以直接赋一段Lua代码字符串,
b.为了热更新.可以指定一个Lua脚本文件,Unity不支持扩展名为lua的文件,所以可将Lua脚本扩展名定为txt(纯文本文件),并用unity的TextAsset列表负责记录所有脚本文件。建议列表中给每个脚本搭配一个string类型的ID,这样凭此ID即可加载正确的lua脚本;另外在LuaState类中新增一个String类型的public成员,赋值为该ID。这样一旦某个Lua脚本在运行时报错,可根据输出的ID值判断是哪个Lua脚本有错误(关于TextAsset:TextAsset TXTFile = (TextAsset)Resources.Load() ; TextWriter tw = new StreamWriter() )
c.Lua里的预处理:
luanet.load_assembly("Assembly-CSharp")
luanet.load_assembly('UnityEngine')
Vector2 = luanet.import_type('UnityEngine.Vector2')
Vector3 = luanet.import_type('UnityEngine.Vector3')
GameObject = luanet.import_type('UnityEngine.GameObject')
luanet.import_type('System.Collections.Generic.List')
Debug = luanet.import_type('UnityEngine.Debug')
单独写个Lua脚本记录上面的Lua常用预处理脚本,先加载一下这个脚本。Lua调用C#后,可以Import自定义C#类,当然在C#中实例化的LuaState也可以预定义一些Lua全局变量,这都是在C#里完成的,比如:
3.调用Lua代码中的方法(GetFunction(string),LuaFunction.callFunction(string))。
其中,建议列表中给每个脚本搭配一个string类型的ID,这样凭此ID即可加载正确的lua脚本;另外在LuaState类中新增一个String类型的public成员,赋值为该ID。这样一旦某个Lua脚本在运行时报错,可根据输出的ID值判断是哪个Lua脚本有错误。