//填充3c场景 static void FillScnData3C(string scnType, string scnName, string scnSubFolderPath, GameObject scnPrefab) { var trm = scnPrefab.transform; var mapTrm = trm.GetChild(0); string mapName = mapTrm.name; var objsTrm = trm.Find("objs"); Tower[] towers = objsTrm.GetComponentsInChildren <Tower> (); //获取或创建ScnData string scnDataAssetPath = scnSubFolderPath + "/scnData.asset"; //Debug.LogError ("------>scnDataAssetPath:"+scnDataAssetPath); string scnDataAssetReletivePath = EditorHelper.ChangeToRelativePath(scnDataAssetPath); Scn3CData scn3CData = new Scn3CData(); scn3CData.ScnName = scnName; scn3CData.MapName = mapName; scn3CData.TowerDataList = new List <TowerData> (); for (int i = 0; i < towers.Length; i++) { TowerData td = new TowerData(); td.Camp = towers[i].Camp; td.Pos = towers [i].transform.position; td.Priority = towers [i].Priority; scn3CData.TowerDataList.Add(td); } Town[] towns = objsTrm.GetComponentsInChildren <Town> (); scn3CData.TownDataList = new List <TownData> (); for (int i = 0; i < towns.Length; i++) { TownData td = new TownData(); td.Camp = towns[i].Camp; td.Pos = towns [i].transform.position; scn3CData.TownDataList.Add(td); } if (!EditorHelper.BeFileExist(scnDataAssetPath)) { Debug.LogError("MeEditor.FillScnData3C scnData 不存在,创建新数据文件 path:" + scnDataAssetPath + " "); scn3CData = ScriptableHelper.CreateOrReplaceAsset <Scn3CData> (scn3CData, scnDataAssetReletivePath); } else { Scn3CData oldScn3CData = AssetDatabase.LoadAssetAtPath <Scn3CData> (scnDataAssetReletivePath); bool bSame = Scn3CData.BeSame(scn3CData, oldScn3CData); Debug.LogError("MeEditor.FillScnData3C scnData存在,读取数据文件,判断是否有数据变更,有就覆盖数据 path:" + scnDataAssetPath + " bSame:" + bSame); if (!bSame) { oldScn3CData.ScnName = scn3CData.ScnName; oldScn3CData.MapName = scn3CData.MapName; oldScn3CData.TowerDataList = new List <TowerData> (); oldScn3CData.TowerDataList.AddRange(scn3CData.TowerDataList.ToArray()); oldScn3CData.TownDataList = new List <TownData> (); oldScn3CData.TownDataList.AddRange(scn3CData.TownDataList.ToArray()); Debug.LogError("MeEditor.FillScnData3C scnName:" + oldScn3CData.ScnName + " mapName:" + oldScn3CData.MapName + " ListCount:" + oldScn3CData.TowerDataList.Count); } } }
/// <summary> /// 比较两个Scn3CData是否相同 /// </summary> /// <returns><c>true</c>, if same was been, <c>false</c> otherwise.</returns> public static bool BeSame(Scn3CData a, Scn3CData b) { if (!a.ScnName.Equals(b.ScnName)) { return(false); } if (!a.MapName.Equals(b.MapName)) { return(false); } if (null == a.TowerDataList && null != b.TowerDataList) { return(false); } if (null == b.TowerDataList && null != a.TowerDataList) { return(false); } if (a.TowerDataList.Count != b.TowerDataList.Count) { return(false); } if (a.TownDataList.Count != b.TownDataList.Count) { return(false); } int count = a.TowerDataList.Count; for (int i = 0; i < count; i++) { if (a.TowerDataList[i].Camp != b.TowerDataList[i].Camp) { return(false); } if (a.TowerDataList[i].Pos != b.TowerDataList[i].Pos) { return(false); } if (a.TowerDataList[i].Priority != b.TowerDataList[i].Priority) { return(false); } } int townLen = a.TownDataList.Count; for (int i = 0; i < townLen; i++) { if (a.TownDataList [i].Camp != b.TownDataList [i].Camp) { return(false); } if (a.TownDataList [i].Pos != b.TownDataList [i].Pos) { return(false); } } return(true); }