热更新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脚本有错误。

你可能感兴趣的:(热更新03_ULua Day0826)