/// <summary> /// 加载当前场景的采集点对象 /// </summary> private void LoadNowAssetsObj() { if (dataDic.ContainsKey(this.nowSceneName)) { TextAsset nowSceneTextAsset = dataDic[this.nowSceneName]; string assetText = Encoding.UTF8.GetString(nowSceneTextAsset.bytes); StuffDataInfoCollection stuffDataInfoCollection = DeSerializeNow <StuffDataInfoCollection>(assetText); if (stuffDataInfoCollection != null) { nowStuffDataInfoCollection = stuffDataInfoCollection; foreach (StuffDataInfo stuffDataInfo in nowStuffDataInfoCollection.StuffDataInfos) { if (string.IsNullOrEmpty(stuffDataInfo.stuffPrefabName)) { continue; } if (!stuffDataDic.ContainsKey(stuffDataInfo.stuffPrefabName)) { continue; } stuffDataInfo.Load(); } } } }
private void Update() { Scene nowScene = SceneManager.GetActiveScene(); if (!string.Equals(nowScene.name, this.nowSceneName)) { this.nowSceneName = nowScene.name; //清理之前创建的采集点对象并和从新加载新的 if (nowStuffDataInfoCollection != null) { if (nowStuffDataInfoCollection.StuffDataInfos != null) { foreach (StuffDataInfo stuffDataInfo in nowStuffDataInfoCollection.StuffDataInfos) { if (stuffDataInfo != null) { GameObject.DestroyImmediate(stuffDataInfo.StuffObj); } } } } nowStuffDataInfoCollection = null; LoadNowAssetsObj(); } }
public void Load() { TextAsset[] allTextAssets = Resources.LoadAll <TextAsset>(StuffData.dataDirectoryPath);//加载所有场景的stuff信息 List <StuffDataInfoCollection> stuffDataInfoCollectionList = new List <StuffDataInfoCollection>(); foreach (TextAsset textAsset in allTextAssets) { string assetName = textAsset.name; string assetText = Encoding.UTF8.GetString(textAsset.bytes); StuffDataInfoCollection stuffDataInfoCollection = DeSerializeNow <StuffDataInfoCollection>(assetText); if (stuffDataInfoCollection != null) { stuffDataInfoCollectionList.Add(stuffDataInfoCollection); } } stuffDataInfoCollections = stuffDataInfoCollectionList.ToArray(); foreach (StuffDataInfoCollection stuffDataInfoCollection in stuffDataInfoCollections) { if (stuffDataInfoCollection.StuffDataInfos != null) { foreach (StuffDataInfo stuffDataInfo in stuffDataInfoCollection.StuffDataInfos) { stuffDataInfo.Init(); } } } }
/// <summary> /// 通过场景名和采集点id获取采集点信息 /// </summary> /// <param name="sceneName"></param> /// <param name="stuffID"></param> /// <returns></returns> public StuffDataInfo GetStuffDataInfo(string sceneName, int stuffID) { StuffDataInfoCollection stuffDataInfoColletion = stuffDataInfoCollections.FirstOrDefault(temp => string.Equals(temp.sceneName, sceneName)); if (stuffDataInfoCollections != null) { return(stuffDataInfoColletion.StuffDataInfos.FirstOrDefault(temp => temp.StuffID == stuffID)); } return(null); }
/// <summary> /// 通过场景名获取该场景的所有采集点信息 /// </summary> /// <param name="sceneName"></param> /// <returns></returns> public StuffDataInfo[] GetStuffDataInfos(string sceneName) { StuffDataInfoCollection stuffDataInfoCollection = stuffDataInfoCollections.FirstOrDefault(temp => string.Equals(temp.sceneName, sceneName));; if (stuffDataInfoCollection != null && stuffDataInfoCollection.StuffDataInfos != null) { return(stuffDataInfoCollection.StuffDataInfos.ToArray()); } return(new StuffDataInfo[0]); }
private void OnDestroy() { if (nowStuffDataInfoCollection != null) { if (nowStuffDataInfoCollection.StuffDataInfos != null) { foreach (StuffDataInfo stuffDataInfo in nowStuffDataInfoCollection.StuffDataInfos) { if (stuffDataInfo != null) { GameObject.DestroyImmediate(stuffDataInfo.StuffObj); } } } } nowStuffDataInfoCollection = null; }
private void OnGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("路径信息请在StuffManagerEditor内自行设置"); EditorGUILayout.LabelField("当前场景:" + nowSceneName); if (nowStuffDataInfoCollection == null)//如果当前场景不存在数据 { if (GUILayout.Button("创建该场景的采集点信息数据")) { nowStuffDataInfoCollection = new StuffDataInfoCollection(); nowStuffDataInfoCollection.sceneName = nowSceneName; if (File.Exists(dataAllPath + "\\" + nowSceneName + ".txt")) { if (EditorUtility.DisplayDialog("警告!", "存在相同的文件" + nowSceneName + ".txt\r\n是否覆盖?", "确认覆盖", "取消覆盖")) { string valueText = SerializeNow <StuffDataInfoCollection>(nowStuffDataInfoCollection); File.WriteAllText(dataAllPath + "\\" + nowSceneName + ".txt", valueText, Encoding.UTF8); } else { nowStuffDataInfoCollection = null; } } else { File.Create(dataAllPath + "\\" + nowSceneName + ".txt").Close(); string valueText = SerializeNow <StuffDataInfoCollection>(nowStuffDataInfoCollection); File.WriteAllText(dataAllPath + "\\" + nowSceneName + ".txt", valueText, Encoding.UTF8); } } } else//如果当前场景存在数据 { if (GUILayout.Button("保存数据")) { if (nowStuffDataInfoCollection != null && File.Exists(dataAllPath + "\\" + nowStuffDataInfoCollection.sceneName + ".txt")) { foreach (StuffDataInfo tempStuffdataInfo in nowStuffDataInfoCollection.StuffDataInfos) { if (tempStuffdataInfo.StuffObj != null) { tempStuffdataInfo.StuffLocation = tempStuffdataInfo.StuffObj.transform.position; tempStuffdataInfo.StuffAngle = tempStuffdataInfo.StuffObj.transform.eulerAngles; } } string valueText = SerializeNow <StuffDataInfoCollection>(nowStuffDataInfoCollection); File.WriteAllText(dataAllPath + "\\" + nowStuffDataInfoCollection.sceneName + ".txt", valueText, Encoding.UTF8); EditorUtility.DisplayDialog("保存数据", "保存成功!", "确认"); } } scrollPostion = EditorGUILayout.BeginScrollView(scrollPostion); StuffDataInfo[] stuffDataInfos = nowStuffDataInfoCollection.StuffDataInfos.ToArray(); string[] showGoodsTypeNames = goodsTypeToNameDic.Values.ToArray(); int[] showGoodsTypeIDs = goodsTypeToNameDic.Keys.ToArray(); foreach (StuffDataInfo stuffDataInfo in stuffDataInfos) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("ID:", GUILayout.Width(20)); stuffDataInfo.StuffID = EditorGUILayout.IntField(stuffDataInfo.StuffID, GUILayout.Width(30)); EditorGUILayout.Space(); EditorGUILayout.LabelField("Name:", GUILayout.Width(35)); stuffDataInfo.StuffName = EditorGUILayout.TextField(stuffDataInfo.StuffName, GUILayout.Width(100)); if (stuffDataInfo.StuffObj) { stuffDataInfo.StuffObj.name = stuffDataInfo.StuffName; } EditorGUILayout.Space(); EditorGUILayout.LabelField("Target:", GUILayout.Width(40)); if (!string.IsNullOrEmpty(stuffDataInfo.stuffPrefabName) && stuffDataDic.ContainsKey(stuffDataInfo.stuffPrefabName))//如果存在该预设提则实例化并显示 { EditorGUILayout.ObjectField(stuffDataInfo.StuffObj, typeof(GameObject), true, GUILayout.Width(100)); if (GUILayout.Button("×", GUILayout.Width(25))) { if (EditorUtility.DisplayDialog("警告!", "是否删除该游戏对象(重新选择预设提)", "是", "否")) { stuffDataInfo.stuffPrefabName = ""; if (stuffDataInfo.StuffObj != null) { GameObject.DestroyImmediate(stuffDataInfo.StuffObj); } stuffDataInfo.StuffObj = null; stuffDataInfo.Load(); } } } else { List <string> names = stuffDataDic.Keys.ToList(); int index = names.IndexOf(stuffDataInfo.stuffPrefabName); index = EditorGUILayout.Popup(index, names.ToArray(), GUILayout.Width(100)); if (index >= 0) { stuffDataInfo.stuffPrefabName = names[index]; stuffDataInfo.Load(); } } EditorGUILayout.Space(); int nowID = (int)stuffDataInfo.StuffType; EditorGUILayout.LabelField("Type:", GUILayout.Width(35)); nowID = EditorGUILayout.IntPopup(nowID, showGoodsTypeNames, showGoodsTypeIDs); stuffDataInfo.StuffType = (EnumGoodsType)nowID; EditorGUILayout.Space(); EditorGUILayout.LabelField("Count:", GUILayout.Width(40)); stuffDataInfo.StuffCount = EditorGUILayout.IntField(stuffDataInfo.StuffCount, GUILayout.Width(30)); EditorGUILayout.Space(); EditorGUILayout.LabelField("Cooling:", GUILayout.Width(50)); stuffDataInfo.CoolingTime = EditorGUILayout.FloatField(stuffDataInfo.CoolingTime, GUILayout.Width(35)); EditorGUILayout.Space(); if (GUILayout.Button("删除")) { if (EditorUtility.DisplayDialog("警告!", "请再次确认是否删除?", "确认", "取消")) { if (stuffDataInfo != null) { if (stuffDataInfo.StuffObj != null) { GameObject.DestroyImmediate(stuffDataInfo.StuffObj); } nowStuffDataInfoCollection.StuffDataInfos.Remove(stuffDataInfo); } } } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); if (GUILayout.Button("添加")) { nowStuffDataInfoCollection.StuffDataInfos.Add( new StuffDataInfo() { StuffID = nowStuffDataInfoCollection.StuffDataInfos.Count() > 0 ? (nowStuffDataInfoCollection.StuffDataInfos.Max(temp => temp.StuffID) + 1) : 0 }); } } EditorGUILayout.EndVertical(); }