各平台如何热更新?
Android,PC(C#)
将执行代码预编译为AssemblyDLL
将代码作为TextAsset打包进AssetBundle
运行时调用AssemblyDLL代码
更新相应的AssetBundle即可实现热更新
IOS(不允许使用C#的部分反射功能并不支持JIT)
Unity+Lua插件(常见的有uLua,xLua,ILRuntime)
什么是是xLua?
这是一款腾讯开发的Lua插件下载网址:GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.
下面是一段简单的C#调用Lua代码
//XLua解析器获得 LuaEnv env = new LuaEnv(); //解析器运行Lua代码,把字符串当成Lua代码执行 env.DoString("print('Hello world!')"); //解析器释放 env.Dispose();
如何使用Lua调用C#代码呢?代码如下
LuaEnv env = new LuaEnv(); //Lua调用 C#代码 (CS.命名空间.类名.方法名(参数)) env.DoString("CS.UnityEngine.Debug.Log('From Lua')"); env.Dispose();
这样两方都可以互相调用对方了
Lua返回值给C#(获取解析器与释放都是一样的不再赘述)
object[] data = env.DoString("return 100,true"); Debug.Log("Lua的第一个返回值:"+data[0].ToString()); Debug.Log("Lua的第二个返回值:"+data[1].ToString());
调用Lua文件执行
// 内置加载器扫描预制目录,查找是否存在test.lua env.DoString("require('test')");