public LuaFileInfo SingleGetInfo(string bundleName, string className) { string path = Application.dataPath + "/Resources/Scripts/LuaTest2.lua"; //string luaCode = File.ReadAllText(Path.Combine(path, "LuaTest2.Lua")); //Script script = new Script(); //script.DoString(luaCode); //this.script = script; string scriptData = File.ReadAllText(path); //DynValue table = Script.RunString(scriptData); script.DoString(scriptData); LuaFileInfo info = new LuaFileInfo(); info.className = script.Globals.Get(className); DynValue newFunction = info.className.Table.Get("new"); if (newFunction.IsNotNil()) { info.classInst = script.Call(newFunction, info.className); } else { Debug.LogError(className + "new not found"); return(null); } return(info); //print(LuaFileManager.Instance.script.DoFile(path)); }
// Update is called once per frame void Update() { //If we press F5, reload the script and run it. if (Input.GetKeyDown(KeyCode.F5)) { //string path = Application.dataPath + "/Resources/Scripts/LuaTest2.lua"; //StreamReader reader = new StreamReader(path); //string content = reader.ReadToEnd(); //string scriptData = File.ReadAllText(path); //script.DoFile(scriptData); LuaFileManager.Instance.Init(); LuaFileInfo info = LuaFileManager.Instance.SingleGetInfo("test", "LuaTest2"); DynValue function = LuaFileManager.Instance.script.Globals.Get("LuaTest2").Table.Get("OnClickDoLocalMove"); LuaFileManager.Instance.script.Call(function, info.classInst); } if (Input.GetKeyDown(KeyCode.F2)) { DynValue classInst = script.Globals.Get("LuaTest2").Table.Get("new"); DynValue function = script.Globals.Get("LuaTes2").Table.Get("OnClickDoLocalMove"); script.Call(function, classInst); } }
public void OnClickMoveTest() { UnityEngine.Debug.Log("2"); LuaFileInfo info = LuaFileManager.Instance.SingleGetInfo("test", "LuaTest2"); DynValue function = LuaFileManager.Instance.script.Globals.Get("LuaTest2").Table.Get("OnClickDoLocalMove"); LuaFileManager.Instance.script.Call(function, info.classInst); }
public LuaFileInfo GetInfo(string bundleName, string className) { LuaFileInfo info = null; dicLuaFileInfo.TryGetValue(className, out info); if (info == null && className != "none") { info = ActivatePromotion(bundleName, className); } return(info); }
/// <summary> /// 解析Lua文件配置列表 /// </summary> /// <param name="content">配置列表内容</param> public void ParseLuaFilesConfig(string content) { m_LuaFileInfos.Clear(); string[] contentLines = content.Split('\n'); int len = contentLines.Length; for (int i = 0; i < len; i++) { if (!string.IsNullOrEmpty(contentLines[i])) { LuaFileInfo info = Utility.Json.ToObject <LuaFileInfo>(contentLines[i]); m_LuaFileInfos.Add(info); } } }
LuaFileInfo CreatePromtionObject(string bundleName, string className) { if (className == "none") { return(null); } AssetBundleLoadAssetOperation request = AssetBundleManager.LoadAssetFromCachedAssetBundle(bundleName, className, typeof(TextAsset)); if (request != null && request.IsDone()) { TextAsset luaSrc = request.GetAsset <TextAsset>(); script.DoString(luaSrc.text); } else { Debug.LogError(className + ".lua load Failed"); return(null); } LuaFileInfo info = new LuaFileInfo(); info.className = script.Globals.Get(className); DynValue newFunction = info.className.Table.Get("new"); if (newFunction.IsNotNil()) { info.classInst = script.Call(newFunction, info.className); } else { Debug.LogError(className + "new not found"); return(null); } return(info); }
// 없으면 새로 생성하고 맵에 등록후 OnActivatePromotion, OnSceneReady 함수들 실행 public LuaFileInfo ActivatePromotion(string bundleName, string className) { if (script == null && className == "none") { Debug.Log("PromotionManager not init()!! ignore packet!"); return(null); } LuaFileInfo info = null; dicLuaFileInfo.TryGetValue(className, out info); if (info != null) { Debug.LogError(className + " is already active!"); return(null); } info = CreatePromtionObject(bundleName, className); dicLuaFileInfo[className] = info; return(info); }