From a79d05190325f1e6b03e068fd96782ee5e823810 Mon Sep 17 00:00:00 2001 From: xiekaidong Date: Fri, 9 Jun 2023 17:35:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BFOthersTools/BoardEditorTools.meta | 8 + .../BoardEditorTools/BoardEditorWindow.cs | 538 ++++++++++++++++++ .../BoardEditorWindow.cs.meta | 11 + Assets/Editor/BFOthersTools/OtherToolsMenu.cs | 7 + Assets/scenes/board_edit_scene.unity | 377 ++++++++++++ Assets/scenes/board_edit_scene.unity.meta | 7 + Tools/tranexcel_new/load_board.py | 37 ++ Tools/tranexcel_new/save_board.py | 45 ++ 8 files changed, 1030 insertions(+) create mode 100644 Assets/Editor/BFOthersTools/BoardEditorTools.meta create mode 100644 Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs create mode 100644 Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs.meta create mode 100644 Assets/scenes/board_edit_scene.unity create mode 100644 Assets/scenes/board_edit_scene.unity.meta create mode 100644 Tools/tranexcel_new/load_board.py create mode 100644 Tools/tranexcel_new/save_board.py diff --git a/Assets/Editor/BFOthersTools/BoardEditorTools.meta b/Assets/Editor/BFOthersTools/BoardEditorTools.meta new file mode 100644 index 000000000..4d02f25b5 --- /dev/null +++ b/Assets/Editor/BFOthersTools/BoardEditorTools.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0db9ae993e0bba941a6bfe7227aff6bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs b/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs new file mode 100644 index 000000000..b24abf16f --- /dev/null +++ b/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs @@ -0,0 +1,538 @@ +using System.Text.RegularExpressions; +using System; +using System.Linq.Expressions; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.IO; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace BFEditor +{ + public class BoardEditorWindow : EditorWindow { + + // private static void ShowWindow() { + // var window = GetWindow(); + // window.titleContent = new GUIContent("BoardWindow"); + // window.Show(); + // } + const string BOARD_EXCEL_KEY = "bf_board_excel_key"; + const string BOARD_GRID_TYPE_KEY = "bf_board_grid_type_key"; + const int gridCount = 49; + string battleImgDirectory = "Assets/arts/textures/ui/battle/"; + string boardFilepath; + string boardGridTypePath; + string boardFiledName = "board"; + string randomTypeStr = ""; + int curIndex = 1; + Dictionary> boardGridTypeDict = new Dictionary>(); + Dictionary boardDict = new Dictionary(); + Dictionary outPutBoardDict = new Dictionary(); + Dictionary imgDict = new Dictionary(); + bool loadExcelOver = false; + Dictionary elementTypeImgDict = new Dictionary(){ + [1] = "red_1", + [2] = "yellow_1", + [3] = "green_1", + [4] = "blue_1", + [5] = "purple_1" + }; + Texture boardImg; + private void OnEnable() + { + loadExcelOver = false; + boardFilepath = GetBoardExcelPath(); + if (boardFilepath.Equals("")) + { + boardFilepath = "选择配置表路径"; + } + + boardGridTypePath = GetBoardGridTypePath(); + if (boardGridTypePath.Equals("")) + { + boardGridTypePath = "选择grid_type配置表路径"; + } + string[] paths = Directory.GetFiles(battleImgDirectory); + foreach(var path in paths) + { + if(!path.EndsWith(".meta")) + { + string formatPath = Path.GetFileNameWithoutExtension(path); + imgDict[formatPath] = AssetDatabase.LoadAssetAtPath(path); + } + } + boardImg = AssetDatabase.LoadAssetAtPath("Assets/arts/textures/background/battle_common/chessboard_1.png"); + } + string GetBoardExcelPath() + { + return PlayerPrefs.GetString(BOARD_EXCEL_KEY, ""); + } + + void SetBoardExcelPath(string path) + { + PlayerPrefs.SetString(BOARD_EXCEL_KEY, path); + } + + string GetBoardGridTypePath() + { + return PlayerPrefs.GetString(BOARD_GRID_TYPE_KEY, ""); + } + + void SetBoardGridTypePath(string path) + { + PlayerPrefs.SetString(BOARD_GRID_TYPE_KEY, path); + } + + BoardEditorWindow() + { + this.titleContent = new GUIContent("棋盘编辑器"); + } + + private void OnGUI() { + DrawBaseInfo(); + DragBoard(); + } + + void DrawBaseInfo() + { + GUILayout.BeginVertical(); + GUILayout.Space(10); + GUILayout.BeginHorizontal(); + GUILayout.Label("grid_type 路径", GUILayout.Width(100)); + GUILayout.Space(10); + GUILayout.TextField(boardGridTypePath, GUILayout.Width(300)); + if (GUILayout.Button("选择", GUILayout.Width(80))) + { + string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardGridTypePath(), ""); + if (openPath.CompareTo("") != 0) + { + boardGridTypePath = openPath; + SetBoardGridTypePath(openPath); + } + } + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + GUILayout.BeginHorizontal(); + GUILayout.Label("配置表路径", GUILayout.Width(100)); + GUILayout.Space(10); + GUILayout.TextField(boardFilepath, GUILayout.Width(300)); + if (GUILayout.Button("选择", GUILayout.Width(80))) + { + string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardExcelPath(), ""); + if (openPath.CompareTo("") != 0) + { + boardFilepath = openPath; + SetBoardExcelPath(openPath); + } + } + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + GUILayout.BeginHorizontal(); + GUILayout.Label("字段名称", GUILayout.Width(100)); + GUILayout.Space(10); + boardFiledName = GUILayout.TextField(boardFiledName, GUILayout.Width(200)); + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + if (GUILayout.Button("加载棋盘", GUILayout.Width(80))) + { + LoadBoardExcel(); + } + + GUILayout.BeginHorizontal(); + if (!IsInNewBoard()) + { + if (GUILayout.Button("上一张", GUILayout.Width(80))) + { + showSwitchBoardSaveDialog(Math.Max(curIndex - 1, 1)); + } + } + + GUILayout.BeginHorizontal(GUILayout.Width(80)); + GUIStyle style = new GUIStyle(GUI.skin.label); + style.alignment = TextAnchor.MiddleCenter; + GUILayout.Label("当前编号id = ", style); + showSwitchBoardSaveDialog(int.Parse(GUILayout.TextField(curIndex.ToString(), GUILayout.Width(40)))); + GUILayout.EndHorizontal(); + if (!IsInNewBoard()) + { + if (GUILayout.Button("下一张", GUILayout.Width(80))) + { + showSwitchBoardSaveDialog(Math.Min(curIndex + 1, boardDict.Count)); + } + } + + if (GUILayout.Button("复制当前棋盘", GUILayout.Width(80))) + { + if (!boardDict.ContainsKey(curIndex)) + { + return; + } + JArray jo = boardDict[curIndex]; + GUIUtility.systemCopyBuffer = JsonConvert.SerializeObject(jo); + } + + if (GUILayout.Button("粘贴棋盘", GUILayout.Width(80))) + { + JArray jo = (JArray)JsonConvert.DeserializeObject(GUIUtility.systemCopyBuffer); + if (jo == null) + { + return; + } + boardDict[curIndex] = jo; + } + + if (!IsInNewBoard()) + { + if (GUILayout.Button("新建棋盘", GUILayout.Width(80))) + { + curIndex = outPutBoardDict.Count + 1; + boardDict[curIndex] = new JArray(); + for (int i = 0; i < gridCount; i++) + { + JArray unit = (JArray)JsonConvert.DeserializeObject("[0, 0]"); + boardDict[curIndex].Add(unit); + } + } + } + else + { + if (GUILayout.Button("退出新建棋盘", GUILayout.Width(80))) + { + boardDict.Remove(curIndex); + curIndex = outPutBoardDict.Count; + } + if (GUILayout.Button("保存当前棋盘", GUILayout.Width(80))) + { + SaveBoard(curIndex); + } + } + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + + GUILayout.BeginArea(new Rect(730, 500, 500, 100)); + GUILayout.BeginVertical(); + GUILayout.Label("随机类型和数量[类型,数量] 空格 [类型,数量]"); + randomTypeStr = GUILayout.TextField(randomTypeStr, GUILayout.Width(500)); + if(GUILayout.Button("生成随机棋盘", GUILayout.Width(80))) + { + string[] units = randomTypeStr.Split('['); + Dictionary dict = new Dictionary(); + for (int i = 0; i < units.Length; i++) + { + string formatStr = units[i].Replace("[", "").Replace("]", "").Replace(" ", ""); + string[] unitList = formatStr.Split(','); + if (unitList.Length >= 2) + { + dict[int.Parse(unitList[0])] = int.Parse(unitList[1]); + } + } + List list = new List(); + for (int i = 0; i < gridCount; i++) + { + list.Add(i); + } + Debug.Log(JsonConvert.SerializeObject(dict)); + JArray ja = new JArray(); + for (int i = 0; i < gridCount; i++) + { + JArray unit = (JArray)JsonConvert.DeserializeObject("[0, 0]"); + ja.Add(unit); + } + foreach (int gridType in dict.Keys) + { + for(int i = 0; i < dict[gridType]; i++) + { + int index = UnityEngine.Random.Range(0, list.Count); + ja[list[index]][0] = gridType; + list.RemoveAt(index); + } + } + boardDict[curIndex] = ja; + } + GUILayout.EndArea(); + if(GUI.Button(new Rect(1050, 10, 100, 30), "导出到Excel")) + { + if (CheckBoardChanged(curIndex)) + { + switch (EditorUtility.DisplayDialogComplex("提示", "当前棋盘已经改变,是否保存", "确定", "放弃", "再次确认")) + { + case 0: + SaveBoard(curIndex); + SaveBoardExcel(); + break; + case 1: + AbortBoard(curIndex); + SaveBoardExcel(); + break; + case 2: + break; + default: + break; + } + } + else + { + SaveBoardExcel(); + } + } + } + + void LoadBoardExcel() + { + var desktopDir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory); + var tempPath = System.IO.Path.Combine(desktopDir, "BoardEditorTemp.txt"); + + string relitivePath = Application.dataPath; + relitivePath = relitivePath.Remove(relitivePath.Length - 6, 6); + string pythonToolPath = relitivePath + "Tools/tranexcel_new"; + + // 读取grid_type配置表 + BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardGridTypePath, pythonToolPath); + string boardGridTypeJson = File.ReadAllText(tempPath); + JObject jsonObj = (JObject)JsonConvert.DeserializeObject(boardGridTypeJson); + foreach (var item in jsonObj) + { + int key = int.Parse(item.Key); + Dictionary dict = new Dictionary(); + foreach (var item2 in (JObject)item.Value) + { + dict[item2.Key] = item2.Value.ToString(); + } + boardGridTypeDict[key] = dict; + } + + // 读取boardFile配置表 + BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardFilepath, pythonToolPath); + string boardFileJson = File.ReadAllText(tempPath); + + jsonObj = (JObject)JsonConvert.DeserializeObject(boardFileJson); + foreach (var item in jsonObj){ + if (item.Value[boardFiledName] != null) + { + int key = int.Parse(item.Key); + boardDict[key] = copyBoard((JArray)item.Value[boardFiledName]); + outPutBoardDict[key] = copyBoard((JArray)item.Value[boardFiledName]); + } + } + + loadExcelOver = true; + } + + void SaveBoardExcel() + { + var desktopDir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory); + var tempPath = System.IO.Path.Combine(desktopDir, "BoardEditorTemp.txt"); + Dictionary> output = new Dictionary>(); + foreach(int key in outPutBoardDict.Keys) + { + output[key] = new Dictionary(); + output[key][boardFiledName] = copyBoard(outPutBoardDict[key]); + } + string relitivePath = Application.dataPath; + relitivePath = relitivePath.Remove(relitivePath.Length - 6, 6); + string pythonToolPath = relitivePath + "Tools/tranexcel_new"; + File.WriteAllText(tempPath, JsonConvert.SerializeObject(output)); + BFEditorUtils.RunCommond("python", "save_board.py " + tempPath + " " + boardFilepath, pythonToolPath); + } + + void DragBoard() + { + Texture img; + GUI.DrawTexture(new Rect(0, 150, 702, 702), boardImg); + if(!loadExcelOver) + { + return; + } + int startOffset = 22; + int textureWidth = 94; + if (!boardDict.ContainsKey(curIndex)) + { + return; + } + + GUILayout.BeginArea(new Rect(0, 150, 702, 702)); + GUILayout.BeginVertical(); + JArray jo = boardDict[curIndex]; + int posIndex = 0; + for (int row = 1; row <= 7; row++) { + GUILayout.BeginHorizontal(); + for (int col = 1; col <= 7; col++) { + JArray gridInfo = (JArray)jo[posIndex]; + if(gridInfo.Count < 2) + { + continue; + } + int gridType = (int)gridInfo[0]; + int gridElementType = (int)gridInfo[1]; + if(!boardGridTypeDict.ContainsKey(gridType)) + { + continue; + } + + // 绘制元素 + if (elementTypeImgDict.ContainsKey(gridElementType)) + { + img = imgDict[elementTypeImgDict[gridElementType]]; + GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth, textureWidth, textureWidth), img); + } + + // 绘制类型 + if(boardGridTypeDict[gridType].ContainsKey("icon")) + { + string icon = boardGridTypeDict[gridType]["icon"]; + if (imgDict.ContainsKey(icon)) + { + img = imgDict[icon]; + GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth, textureWidth, textureWidth), img); + } + } + + posIndex++; + } + GUILayout.EndHorizontal(); + } + GUILayout.EndVertical(); + GUILayout.EndArea(); + + GUILayout.BeginArea(new Rect(730, 150, 510, 550)); + GUILayout.BeginVertical(); + GUILayout.BeginHorizontal(); + GUILayout.Label("棋盘配置信息", GUILayout.Width(100), GUILayout.Height(30)); + GUILayout.EndHorizontal(); + + posIndex = 0; + for (int row = 1; row <= 7; row++) { + GUILayout.BeginHorizontal(); + for (int col = 1; col <= 7; col++) { + JArray gridInfo = (JArray)jo[posIndex]; + if(gridInfo.Count < 2) + { + continue; + } + gridInfo[0] = int.Parse(GUILayout.TextField(gridInfo[0].ToString(), GUILayout.Width(25))); + gridInfo[1] = int.Parse(GUILayout.TextField(gridInfo[1].ToString(), GUILayout.Width(25))); + GUILayout.Space(10); + posIndex++; + } + GUILayout.EndHorizontal(); + GUILayout.Space(10); + } + GUILayout.EndVertical(); + GUILayout.EndArea(); + } + + bool CheckBoardChanged(int index) + { + if(boardDict.ContainsKey(index) && outPutBoardDict.ContainsKey(index)) + { + if(outPutBoardDict[index].Count != boardDict[index].Count) + { + return true; + } + + for (int i = 0; i < boardDict[index].Count; i++) + { + JArray tArray = (JArray)boardDict[index][i]; + JArray tArray2 = (JArray)outPutBoardDict[index][i]; + if (tArray.Count != tArray2.Count) + { + return true; + } + for (int j = 0; j < tArray.Count; j++) + { + if (tArray[j].ToString() != tArray2[j].ToString()) + { + return true; + } + } + } + } + return false; + } + + void SaveBoard(int index) + { + if(!boardDict.ContainsKey(index)) + { + return; + } + outPutBoardDict[index] = copyBoard(boardDict[index]); + } + + void AbortBoard(int index) + { + if(!outPutBoardDict.ContainsKey(index)) + { + boardDict.Remove(index); + return; + } + boardDict[index] = copyBoard(outPutBoardDict[index]); + } + + void showSwitchBoardSaveDialog(int targetIndex) + { + if (IsInNewBoard()) + { + return; + } + + if (targetIndex == curIndex) + { + return; + } + + if (CheckBoardChanged(curIndex)) + { + switch (EditorUtility.DisplayDialogComplex("提示", "当前棋盘已经改变,是否保存", "确定", "放弃", "再次确认")) + { + case 0: + SaveBoard(curIndex); + curIndex = targetIndex; + break; + case 1: + AbortBoard(curIndex); + curIndex = targetIndex; + break; + case 2: + break; + default: + break; + } + } + else + { + curIndex = targetIndex; + } + } + + JArray copyBoard(JArray targetArray) + { + JArray resultArray = new JArray(); + for (int i = 0; i < targetArray.Count; i++) + { + JArray unit = new JArray(); + resultArray.Add(unit); + JArray temp = (JArray)targetArray[i]; + for (int j = 0; j < temp.Count; j++) + { + unit.Add(int.Parse(temp[j].ToString())); + } + } + return resultArray; + } + + bool IsInNewBoard() + { + if(!boardDict.ContainsKey(curIndex) && !outPutBoardDict.ContainsKey(curIndex)) + { + return false; + } + return !outPutBoardDict.ContainsKey(curIndex); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs.meta b/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs.meta new file mode 100644 index 000000000..34f49f351 --- /dev/null +++ b/Assets/Editor/BFOthersTools/BoardEditorTools/BoardEditorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 339fc40f64b402d4bb60e77d94902487 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/BFOthersTools/OtherToolsMenu.cs b/Assets/Editor/BFOthersTools/OtherToolsMenu.cs index 573e5ecfd..9c78fb7c0 100644 --- a/Assets/Editor/BFOthersTools/OtherToolsMenu.cs +++ b/Assets/Editor/BFOthersTools/OtherToolsMenu.cs @@ -100,5 +100,12 @@ namespace BFEditor index++; } } + + [MenuItem("其他工具/棋盘编辑器", false, 9)] + public static void CreateBoardEditorWindow() + { + var window = (BoardEditorWindow)EditorWindow.GetWindowWithRect(typeof(BoardEditorWindow), new Rect(Screen.width / 2, Screen.height / 2, 1200, 850), true); + window.Show(); + } } } diff --git a/Assets/scenes/board_edit_scene.unity b/Assets/scenes/board_edit_scene.unity new file mode 100644 index 000000000..addad80cd --- /dev/null +++ b/Assets/scenes/board_edit_scene.unity @@ -0,0 +1,377 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &255378347 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 581222997} + m_Modifications: + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4165930251451731960, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8889665677046596496, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} + propertyPath: m_Name + value: battle_ui + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f0a4fee1adac4647bb28d0ae5db612f, type: 3} +--- !u!1001 &581222996 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 379821213967434738, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1255030095349129672, guid: ac54530c57342254290353ac147bd91d, type: 3} + propertyPath: m_Name + value: ui_root + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ac54530c57342254290353ac147bd91d, type: 3} +--- !u!224 &581222997 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2290935117655172272, guid: ac54530c57342254290353ac147bd91d, type: 3} + m_PrefabInstance: {fileID: 581222996} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1478717503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1478717505} + - component: {fileID: 1478717504} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1478717504 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478717503} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1478717505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478717503} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/Assets/scenes/board_edit_scene.unity.meta b/Assets/scenes/board_edit_scene.unity.meta new file mode 100644 index 000000000..b8bdca07a --- /dev/null +++ b/Assets/scenes/board_edit_scene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57e2e18001c74264c99e83e575cf13c7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tools/tranexcel_new/load_board.py b/Tools/tranexcel_new/load_board.py new file mode 100644 index 000000000..b21c10eed --- /dev/null +++ b/Tools/tranexcel_new/load_board.py @@ -0,0 +1,37 @@ +# -*- encoding: utf-8 -*- +import os +import sys +import excute +import json +import type_deal +import io +import os + +current_file_path = os.path.split(os.path.realpath(__file__))[0] +site_packages_path = os.path.abspath(os.path.join(current_file_path, "../site-packages")) +sys.path.append(site_packages_path) +reload(sys) + +from openpyxl import load_workbook +if __name__ == "__main__" : + av = sys.argv + tempPath = av[1] + xlsname = av[2] + wb = load_workbook(xlsname) + data = {} + for sheet in wb: + maxRow = sheet.max_row + maxColumn = sheet.max_column + for row in range(5, maxRow + 1): + data[sheet.cell(row, 1).value] = {} + t = data[sheet.cell(row, 1).value] + for column in range(2, maxColumn + 1): + key = sheet.cell(2, column).value + # print(type_deal.get_type_from_square(sheet.cell(4, column).value)) + if key == "default" and sheet.cell(row, column).value != None: + v = str(sheet.cell(row, column).value) + t[sheet.cell(3, column).value] = type_deal.to_data(v) + + break + wb.close() + open(tempPath, 'w').write(json.dumps(data)) \ No newline at end of file diff --git a/Tools/tranexcel_new/save_board.py b/Tools/tranexcel_new/save_board.py new file mode 100644 index 000000000..4dc2c460c --- /dev/null +++ b/Tools/tranexcel_new/save_board.py @@ -0,0 +1,45 @@ +# -*- encoding: utf-8 -*- +import os +import sys +import excute +import json +import type_deal +import io +import os + +current_file_path = os.path.split(os.path.realpath(__file__))[0] +site_packages_path = os.path.abspath(os.path.join(current_file_path, "../site-packages")) +sys.path.append(site_packages_path) +reload(sys) + +from openpyxl import load_workbook +if __name__ == "__main__" : + av = sys.argv + jsonStr = open(av[1], 'r').read() + boardDict = json.loads(jsonStr) + filedName = None + count = 1 + for key in boardDict: + for value in boardDict[key]: + filedName = value + break + count += 1 + xlsname = av[2] + wb = load_workbook(xlsname) + data = {} + for sheet in wb: + maxRow = sheet.max_row + maxColumn = sheet.max_column + column = 2 + for col in range(2, maxColumn + 1): + if sheet.cell(3, col).value == filedName: + column = col + for id in range(1, count): + index = int(id) + row = index + 4 + sheet.cell(row, 1).value = index + sheet.cell(row, column).value = str(boardDict[str(index)][filedName]) + break + wb.save(xlsname) + wb.close() + print("导出成功!") \ No newline at end of file