public static PsScriptMgr Deserialize(Factory factory, byte[] data) { if (null == data) { return(null); } factory.Init(); PsScriptMgr scriptMgr = new PsScriptMgr(factory); MemoryStream sm = new MemoryStream(data, false); using (BinaryReader r = new BinaryReader(sm)) { int varDatalength = r.ReadInt32(); byte[] varData = r.ReadBytes(varDatalength); scriptMgr.mVarMgr = VariableMgr.Import(varData); int count = r.ReadInt32(); for (int i = 0; i < count; i++) { int id = r.ReadInt32(); PsScript script = PsScript.Load(scriptMgr, id); if (null == script) { continue; } if (!script.Init()) { continue; } scriptMgr.mScriptList.Add(script); script.Restore(r); } DeserializeList(scriptMgr.mScriptLoadList, r); DeserializeList(scriptMgr.mScriptRemoveList, r); } return(scriptMgr); }
void LoadScript() { if (mScriptLoadList.Count <= 0) { return; } int[] loadArray = mScriptLoadList.ToArray(); foreach (int id in loadArray) { PsScript q = FindScriptById(id); if (null != q) { Debug.LogError("Duplicated Script:" + q); continue; } PsScript script = PsScript.Load(this, id); if (null == script) { continue; } if (!script.Init()) { continue; } mScriptList.Add(script); mScriptLoadList.Remove(id); Debug.Log("begin script:" + script.Id); //脚本开始事件发生后,可能会loadscript。导致向mScriptLoadList添加新元素而发生异常。 //所以改为遍历数组。 InternalEvent.Instance.EmitScriptBegin(script); } }