private void InitLua(string luaFilename, bool updatedScript) { luaState = new LuaState(); luaStateExt = new LuaStateExt(luaState); LuaDLL.open_luaext(luaState.L); LuaDLL.lua_settop(luaState.L, 0); byte [] scriptSource = null; if (updatedScript) { scriptSource = FileUtils.GetDataFromFile(luaFilename); } else { scriptSource = FileUtils.GetDataFromStreamingAssets(luaFilename); } object ret; var ok = luaStateExt.doArc4Buffer(scriptSource, luaFilename, LBootApp.LUA_KEY, out ret); if (!ok) { LogUtil.Error("doArc4Buffer failed! " + luaFilename); } }
private static void LoadConfig() { var luaBridge = LBootApp.luaBridge; var configSourceName = "config.lua"; byte[] configSource = FileUtils.GetDataFromStreamingAssets(configSourceName); // load script if in production if (Application.isEditor) { luaBridge.DoBuffer(configSource, configSourceName); luaBridge.DoString("SCRIPT = 'debug'; MODE = 'development'; "); luaBridge.DoString("PLATFORM = 'editor';"); luaBridge.DoString("SDK = 'standard';"); } else { if (Debug.isDebugBuild) { luaBridge.DoString("SCRIPT = 'compiled'; MODE = 'development'; "); luaBridge.DoBuffer(configSource, configSourceName); } else { luaBridge.DoBuffer(configSource, configSourceName); #if UNITY_ANDROID luaBridge.DoString("SCRIPT = 'compiled'; MODE = 'production'; "); #endif } #if UNITY_ANDROID && !UNITY_EDITOR luaBridge.DoString("PLATFORM = 'android';"); #elif UNITY_IPHONE && !UNITY_EDITOR luaBridge.DoString("PLATFORM = 'ios';"); #elif UNITY_STANDALONE_OSX && !UNITY_EDITOR luaBridge.DoString("PLATFORM = 'osx';"); #else luaBridge.DoString("PLATFORM = 'unknown';"); #endif } }
void StartLua() { ComponentReflectionExt.Init(); var luaBridge = LBootApp.luaBridge; var runDebugScript = luaBridge.DoString("return rawget(_G, 'SCRIPT') == 'debug'"); if (true.Equals(runDebugScript)) { LogUtil.Debug("running debug scripts"); var fname = "debug.lua"; byte[] scriptSource = FileUtils.GetDataFromStreamingAssets(fname); luaBridge.DoBuffer(scriptSource, fname); } else { LogUtil.Debug("running compiled scripts"); var fname = "cl.lc"; byte[] scriptSource = FileUtils.GetDataFromStreamingAssets(fname); luaBridge.DoAesBuffer(scriptSource, fname, LBootApp.LUA_KEY, LBootApp.LUA_IV); luaBridge.Call("__main", new object[1] { "" }); } // 4 times faster for FastGetter FastSetter than using reflection // var go = new GameObject("hello"); // var t = go.transform; // t.position = Vector3.one; // var startTime = Time.realtimeSinceStartup; // object value = null; // for (var i = 0; i < 1000; i++) // { // var positionProperty = ReflectionHelper.GetProperty(t.GetType(), "position"); // value = positionProperty.GetValue(t, null); // } // Debug.LogError("Reflection getter position=" + value.ToString()); // var time = Time.realtimeSinceStartup; // Debug.LogError("reflection getter duration = " + ((time - startTime) * 1000).ToString() + "(ms)"); // // startTime = Time.realtimeSinceStartup; // // for (var i = 0; i < 1000; i++) // { // value = ComponentReflectionExt.FastGetter(t, "position"); // } // Debug.LogError("FastGetter position=" + value.ToString()); // // time = Time.realtimeSinceStartup; // Debug.LogError("Component FastGetter duration = " + ((time - startTime) * 1000).ToString() + "(ms)"); // // var angle = Vector3.one * 100; // startTime = Time.realtimeSinceStartup; // for (var i = 0; i < 1000; i++) // { // var positionProperty = ReflectionHelper.GetProperty(t.GetType(), "localEulerAngles"); // positionProperty.SetValue(t, angle, null); // } // // time = Time.realtimeSinceStartup; // Debug.LogError("reflection setter localEulerAngles=" + t.localEulerAngles.ToString()); // Debug.LogError("reflection setter duration = " + ((time - startTime) * 1000).ToString() + "(ms)"); // t.localEulerAngles = Vector3.one; // angle = new Vector3(199, 199, 199); // startTime = Time.realtimeSinceStartup; // for (var i = 0; i < 1000; i++) // { // ComponentReflectionExt.FastSetter(t, "localEulerAngles", angle); // } // // time = Time.realtimeSinceStartup; // Debug.LogError("FastGetter localEulerAngles=" + t.localEulerAngles.ToString()); // Debug.LogError("Component FastSetter duration = " + ((time - startTime) * 1000).ToString() + "(ms)"); }