public static void SaveLevel() { Debug.Log("SaveLevel"); msobjlist.Clear(); // 场景路径 /* * string scenePath = AssetDatabase.GetAssetPath(selectObject); * * Debug.Log("====================================="); * Debug.Log(sceneName + " path : " + scenePath ); * // 打开这个关卡 * EditorApplication.OpenScene(scenePath); */ MSLevelOptionDataModel od = null; DataStream stream = new DataStream(true); //获取场景中全部道具 Object[] objects = Object.FindObjectsOfType(typeof(GameObject)); foreach (GameObject sceneObject in objects) { if (sceneObject.name == "LevelOption") { LevelOption editor = sceneObject.GetComponent <LevelOption>(); if (editor != null) { od = new MSLevelOptionDataModel(); od.SetValByLevelOption(editor); od.serialize(stream); GameCommon.LOAD_DATA_VERSION = od.version; } ForeachObjAndSave(sceneObject); } } Debug.Log("save list count:" + msobjlist.Count); stream.WriteSInt32(msobjlist.Count); foreach (MSBaseObject msobj in msobjlist) { msobj.Serialize(stream); } if (od == null) { Debug.LogError("can't find the level option!"); return; } WriteDataToFile(od, stream); }
static void WriteDataToFile(MSLevelOptionDataModel od, DataStream data) { string filePath = GameConst.GetLevelDataFilePath(od.levelName + ".lmd"); byte[] objData = data.ToByteArray(); byte[] objGzipData = GameCommon.CompressGZip(objData); GameCommon.WriteByteToFile(objGzipData, filePath); Debug.Log("save path : " + filePath); EditorUtility.DisplayDialog("导出关卡" + od.levelName + "成功!", filePath, "确定"); }
public static void NewLevel() { MSLevelOptionDataModel od = new MSLevelOptionDataModel(); od.version = GameCommon.GAME_DATA_VERSION; od.levelName = "newlevel"; od.mapWidth = 100; od.mapHeight = 100; List <GameObject> delarr = new List <GameObject>(); bool isfind = false; foreach (GameObject sceneObject in Object.FindObjectsOfType(typeof(GameObject))) { if (sceneObject.name == "LevelOption") { LevelOption me = sceneObject.GetComponent <LevelOption>(); od.SetLevelOption(me); GameCommon.LOAD_DATA_VERSION = od.version; isfind = true; } else if (sceneObject.name != "Main Camera") { delarr.Add(sceneObject); } } foreach (GameObject obj in delarr) { DestroyImmediate(obj); } if (!isfind) { GameObject tGO = new GameObject("LevelOption"); LevelOption lo = tGO.AddComponent <LevelOption>(); od.SetLevelOption(lo); GameCommon.LOAD_DATA_VERSION = od.version; } }
public void ReloadScene(DataStream datastream) { Debug.Log("ReloadScene"); MSLevelOptionDataModel od = new MSLevelOptionDataModel(); od.deserialize(datastream); //od.version = (float)datastream.ReadSInt32() / 10000f; //od.levelName = datastream.ReadString16(); //od.mapWidth = datastream.ReadSInt32(); //od.mapHeight = datastream.ReadSInt32(); List <GameObject> delarr = new List <GameObject>(); LevelOption me = null; foreach (GameObject sceneObject in Object.FindObjectsOfType(typeof(GameObject))) { if (sceneObject.name == "LevelOption") { me = sceneObject.GetComponent <LevelOption>(); od.SetLevelOption(me); GameCommon.LOAD_DATA_VERSION = od.version; } else if (sceneObject.name != "Main Camera" && sceneObject.name != "Directional light") { delarr.Add(sceneObject); } } //创建关卡配置物体 if (me == null) { GameObject tGO = new GameObject("LevelOption"); me = tGO.AddComponent <LevelOption>(); od.SetLevelOption(me); GameCommon.LOAD_DATA_VERSION = od.version; } foreach (GameObject obj in delarr) { DestroyImmediate(obj); } int objcount = datastream.ReadSInt32(); Dictionary <int, MSBaseObject> dic = new Dictionary <int, MSBaseObject>(); Debug.Log("objcount : " + objcount); for (int i = 0; i < objcount; i++) { //MSBaseObject.CreateObj(datastream); //从字节流中获取id int type = datastream.ReadSInt32(); string id = datastream.ReadString16(); GameObject go; if (type == -1) { //组物体 go = new GameObject("LevelOption"); } else { Object tempObj = Resources.Load("Prefabs/MapObj/" + id) as GameObject; if (tempObj == null) { Debug.Log(type + "/" + id + " is null!"); } go = (GameObject)Instantiate(tempObj); } MSBaseObject baseobj = go.GetComponent <MSBaseObject>(); if (baseobj == null) { baseobj = go.AddComponent <MSBaseObject>(); } //baseobj.itemtype = type; baseobj.itemid = id; baseobj.Deserialize(datastream); baseobj.init(); if (dic.ContainsKey(baseobj.parent)) { go.transform.parent = dic[baseobj.parent].transform; } else { go.transform.parent = me.transform; } dic.Add(baseobj.myData.instanceID, baseobj); } }