diff --git a/ProjectNLD/Assets/Code/Scripts/Framework/Data/TableManager.cs b/ProjectNLD/Assets/Code/Scripts/Framework/Data/TableManager.cs index 346e3f022d0..b9584177a59 100644 --- a/ProjectNLD/Assets/Code/Scripts/Framework/Data/TableManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Framework/Data/TableManager.cs @@ -12,7 +12,19 @@ namespace Framework public class TableManager : Singlenton, IInitable, ILoadable { private Tables _tables; - public Tables Tables => _tables; + public Tables Tables + { + get + { + #if UNITY_EDITOR + if (_tables == null) + { + _tables = EditorTableManager.instance.tables; + } + #endif + return _tables; + } + } public void Init() { diff --git a/ProjectNLD/Assets/Editor/CharacterBuilder/CharacterExTools.cs b/ProjectNLD/Assets/Editor/CharacterBuilder/CharacterExTools.cs index d03c545dc0d..de143a73118 100644 --- a/ProjectNLD/Assets/Editor/CharacterBuilder/CharacterExTools.cs +++ b/ProjectNLD/Assets/Editor/CharacterBuilder/CharacterExTools.cs @@ -8,9 +8,9 @@ namespace CharacterBuilder public class CharacterExTools { - [MenuItem("Tools/构建器/打印缺失的SPlayer")] - public static void PrintNoSPlayers() + public static string PrintNoSPlayers() { + var resultStr = ""; var allPlayers = EditorTableManager.instance.tables.CharacterAttri.DataList; for (int i = 0; i < allPlayers.Count; i++) { @@ -19,9 +19,10 @@ namespace CharacterBuilder var path = PathEx.GetCharacterDisplayModelPath(skinData.NameID); if (AssetDatabase.LoadAssetAtPath(path) == null) { - Debug.LogError("缺失的SPlayer: " + player.RoleID); + resultStr += player.RoleID + ","; } } + return resultStr; } } diff --git a/ProjectNLD/Assets/Editor/ResCheck.meta b/ProjectNLD/Assets/Editor/ResCheck.meta new file mode 100644 index 00000000000..997750fec1b --- /dev/null +++ b/ProjectNLD/Assets/Editor/ResCheck.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 34b2cf2288524e5ea221fd49667d70d4 +timeCreated: 1709706135 \ No newline at end of file diff --git a/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs b/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs new file mode 100644 index 00000000000..bbe8a48404b --- /dev/null +++ b/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs @@ -0,0 +1,149 @@ +using System; +using Framework; +using Gameplay; +using Gameplay.Utils; +using UnityEditor; +using UnityEngine; + +namespace ResCheck +{ + public class ResCheckWindow : EditorWindow + { + + [MenuItem("Tools/资源检查")] + public static void ShowWindow() + { + + _style_normal = new GUIStyle(); + _style_normal.normal.textColor = Color.green; + + _style_error = new GUIStyle(); + _style_error.normal.textColor = Color.red; + + var window = GetWindow(); + window.titleContent = new UnityEngine.GUIContent("资源检查"); + window.Show(); + window.minSize = new Vector2(600, 300); + window._DoCheck(); + } + + private static GUIStyle _style_normal; + private static GUIStyle _style_error; + + private string _sPlayersCheckResult = ""; + private void _ShowSPlayers() + { + GUILayout.Label("角色展示模型检查:"); + var checkPath = "Assets/Art/Character/Prefabs/Players_S"; + GUILayout.Label(checkPath); + if (string.IsNullOrEmpty(_sPlayersCheckResult)) + { + GUILayout.Label("检查结果:一切正常", _style_normal); + } + else + { + GUILayout.Label("检查结果:" + _sPlayersCheckResult, _style_error); + } + } + + private string _playerIconCheckResult = ""; + private void _ShowPlayerIcon() + { + GUILayout.Label("角色头像检查:"); + var checkPath = "Assets/Art/UI/Texture/Icon/HeadPic/"; + GUILayout.Label(checkPath); + if (string.IsNullOrEmpty(_playerIconCheckResult)) + { + GUILayout.Label("检查结果:一切正常", _style_normal); + } + else + { + GUILayout.Label("检查结果:" + _playerIconCheckResult, _style_error); + } + } + + private string _playerPosterCheckResult = ""; + private void _ShowPlayerPoster() + { + GUILayout.Label("角色海报检查:"); + var checkPath = "Assets/Art/UI/Texture/Poster"; + GUILayout.Label(checkPath); + if (string.IsNullOrEmpty(_playerPosterCheckResult)) + { + GUILayout.Label("检查结果:一切正常", _style_normal); + } + else + { + GUILayout.Label("检查结果:" + _playerPosterCheckResult, _style_error); + } + } + + private void _DoCheck() + { + _sPlayersCheckResult = ""; + _playerIconCheckResult = ""; + _playerPosterCheckResult = ""; + var allPlayers = EditorTableManager.instance.tables.CharacterAttri.DataList; + for (int i = 0; i < allPlayers.Count; i++) + { + var player = allPlayers[i]; + + // 检查SPlayer + { + var skinData = EditorTableManager.instance.tables.SkinCfg.Get(Constants.DEFULT_SKINID, player.RoleID); + var path = PathEx.GetCharacterDisplayModelPath(skinData.NameID); + if (AssetDatabase.LoadAssetAtPath(path) == null) + { + _sPlayersCheckResult += player.RoleID + ","; + } + } + + // 检查Icon + { + var iconPath = CommonUtils.GetDefaultHeadPathByUid((uint)player.RoleID); + if (AssetDatabase.LoadAssetAtPath(iconPath) == null) + { + _playerIconCheckResult += player.RoleID + ","; + } + } + + // 检查Poster + { + var posterPath = CommonUtils.GetCharacterPicPath(player.RoleID, CommonUtils.ECharacterPicPathType.Poster); + if (AssetDatabase.LoadAssetAtPath(posterPath) == null) + { + _playerPosterCheckResult += player.RoleID + ","; + } + } + } + + if (_sPlayersCheckResult.Length > 0) + { + _sPlayersCheckResult = _sPlayersCheckResult.Substring(0, _sPlayersCheckResult.Length - 1); + } + if (_playerIconCheckResult.Length > 0) + { + _playerIconCheckResult = _playerIconCheckResult.Substring(0, _playerIconCheckResult.Length - 1); + } + if (_playerPosterCheckResult.Length > 0) + { + _playerPosterCheckResult = _playerPosterCheckResult.Substring(0, _playerPosterCheckResult.Length - 1); + } + } + + private void OnGUI() + { + EditorGUILayout.HelpBox("此工具用于检查资源是否缺失,请在检查结果中找到对应的资源并处理", MessageType.Warning); + _ShowSPlayers(); + GUILayout.Space(10); + _ShowPlayerIcon(); + GUILayout.Space(10); + _ShowPlayerPoster(); + if (GUILayout.Button("刷新")) + { + _DoCheck(); + } + } + + } +} diff --git a/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs.meta b/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs.meta new file mode 100644 index 00000000000..ba48a7dc068 --- /dev/null +++ b/ProjectNLD/Assets/Editor/ResCheck/ResCheckWindow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fc1d4652fdab4fdab7b731ab4ab7b2c4 +timeCreated: 1709706143 \ No newline at end of file diff --git a/ProjectNLD/Assets/PhxhSDK b/ProjectNLD/Assets/PhxhSDK index 4430b328652..feb2c1e5dd3 160000 --- a/ProjectNLD/Assets/PhxhSDK +++ b/ProjectNLD/Assets/PhxhSDK @@ -1 +1 @@ -Subproject commit 4430b32865241f084bfa613e4f662105287a7a88 +Subproject commit feb2c1e5dd32cd4156b860e4afbd3384686a3354