| | |
| | | using UnityEditor; |
| | | using UnityEditor.Animations; |
| | | using TableConfig; |
| | | using System; |
| | | |
| | | public class ActorEditor : EditorWindow |
| | | { |
| | |
| | | _window.Show(); |
| | | } |
| | | |
| | | [MenuItem("程序/角色相关/卸载NPC动画状态机")] |
| | | static void RemoveAnimator() |
| | | { |
| | | var _dict = Config.Instance.GetAllValues<NPCConfig>(); |
| | | int i = 0; |
| | | foreach (var _model in _dict) |
| | | { |
| | | if (_model.NPCType != 0 |
| | | && _model.NPCType != 2 |
| | | && _model.NPCType != 3 |
| | | && _model.NPCType != 4 |
| | | && _model.NPCType != 5 |
| | | && _model.NPCType != 8 |
| | | && _model.NPCType != 9 |
| | | && _model.NPCType != 14 |
| | | && _model.NPCType != 16 |
| | | && _model.NPCType != 17 |
| | | && _model.NPCType != 18 |
| | | && _model.NPCType != 19) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_model.MODE)) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | private enum BuildNpcType |
| | | { |
| | | Npc, |
| | | Pet, |
| | | Horse |
| | | } |
| | | |
| | | private BuildNpcType m_NpcType; |
| | | |
| | | private bool m_GenerateNoExist = false; |
| | | private bool m_GenerateAnimationClip = false; |
| | | private bool m_GenerateController = false; |
| | | private bool m_GeneratePrefab = false; |
| | | private bool m_GenerateUIController = false; |
| | | |
| | | private int m_ModelResID; |
| | | private int m_NpcID; |
| | | private string m_ModelName; |
| | | private string m_BuildName; |
| | | |
| | | public bool m_HighMesh; |
| | | |
| | | private NpcResourcesBuilder m_NpcResBuilder; |
| | | private ModelResourcesBuilder m_ModelResBuilder; |
| | | |
| | | private void OnEnable() |
| | | { |
| | | ConfigManager.Instance.SyncLoadConfigs(); |
| | | Config.Instance.SyncLoadConfigs(); |
| | | m_NpcResBuilder = new NpcResourcesBuilder(); |
| | | m_ModelResBuilder = new ModelResourcesBuilder(); |
| | | } |
| | |
| | | |
| | | EditorGUILayout.LabelField("# 生成Npc角色资源 #"); |
| | | |
| | | m_ModelName = EditorGUILayout.TextField("模型名称", m_ModelName); |
| | | |
| | | EditorGUILayout.BeginVertical(); |
| | | m_ModelName = EditorGUILayout.TextField("来源名", m_ModelName); |
| | | m_BuildName = EditorGUILayout.TextField("生成名", m_BuildName); |
| | | EditorGUILayout.BeginHorizontal(); |
| | | m_NpcType = (BuildNpcType)EditorGUILayout.EnumPopup("类型:", m_NpcType); |
| | | m_HighMesh = EditorGUILayout.ToggleLeft("高模", m_HighMesh); |
| | | EditorGUILayout.EndHorizontal(); |
| | | EditorGUILayout.EndVertical(); |
| | | EditorGUILayout.BeginHorizontal(); |
| | | m_GenerateNoExist = GUILayout.Toggle(m_GenerateNoExist, "只生成不存在的"); |
| | | m_GeneratePrefab = GUILayout.Toggle(m_GeneratePrefab, "Prefab"); |
| | | m_GenerateAnimationClip = GUILayout.Toggle(m_GenerateAnimationClip, "Clips"); |
| | | m_GenerateController = GUILayout.Toggle(m_GenerateController, "Controller"); |
| | | m_GenerateUIController = GUILayout.Toggle(m_GenerateUIController, "UI_Controller"); |
| | | ResourcesBuilder.OnlyBuildNoExist = m_GenerateNoExist; |
| | | ResourcesBuilder.IsBuildPrefab = m_GeneratePrefab; |
| | | ResourcesBuilder.IsBuildAnimationClip = m_GenerateAnimationClip; |
| | | ResourcesBuilder.IsBuildAnimatorController = m_GenerateController; |
| | | ResourcesBuilder.IsBuildAnimatorUIController = m_GenerateUIController; |
| | | EditorGUILayout.EndHorizontal(); |
| | | |
| | | if (GUILayout.Button("单独生成", GUILayout.Height(24))) |
| | | { |
| | | m_NpcResBuilder.BuildNpc(m_ModelName); |
| | | m_NpcResBuilder.BuildNpc(m_ModelName, m_BuildName, (int)m_NpcType, m_HighMesh); |
| | | } |
| | | |
| | | if (GUILayout.Button("生成所有", GUILayout.Height(24))) |
| | | if (GUILayout.Button("按照给定的NPC配置信息生成")) |
| | | { |
| | | bool _result = EditorUtility.DisplayDialog("温馨提醒", "生成所有换装资源将会耗费比较长的时间, 请记得几点, 是否是需要生成所有的资源, 如果不是, 记得可以去掉不生成的资源,是不是不需要生成已经存在的资源, 如果不需要, 记得勾选[只生成不存在的]", "确认生成", "我按错了"); |
| | | if (_result) |
| | | { |
| | | var _dict = ConfigManager.Instance.GetAllValues<NPCConfig>(); |
| | | foreach (var _model in _dict) |
| | | { |
| | | if (string.IsNullOrEmpty(_model.MODE)) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | m_NpcResBuilder.BuildNpc(_model.MODE); |
| | | } |
| | | BuildAllUIAnimatorController(); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (GUILayout.Button("单独生成", GUILayout.Height(24))) |
| | | { |
| | | m_ModelResBuilder.BuildModelRes(m_ModelResID); |
| | | m_ModelResBuilder.BuildModelRes(m_ModelResID, m_HighMesh); |
| | | } |
| | | |
| | | if (GUILayout.Button("所有翅膀", GUILayout.Height(24))) |
| | | { |
| | | |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | if (_item.Type == (int)E_ModelResType.Wing) |
| | | { |
| | | m_ModelResBuilder.BuildWing(_item.ID); |
| | | m_ModelResBuilder.BuildWing(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (GUILayout.Button("所有武器", GUILayout.Height(24))) |
| | | { |
| | | |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | if (_item.Type == (int)E_ModelResType.Weapon) |
| | | { |
| | | m_ModelResBuilder.BuildWeapon(_item.ID); |
| | | m_ModelResBuilder.BuildWeapon(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (GUILayout.Button("所有副手", GUILayout.Height(24))) |
| | | { |
| | | |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | if (_item.Type == (int)E_ModelResType.Secondary) |
| | | { |
| | | m_ModelResBuilder.BuildSecondary(_item.ID); |
| | | m_ModelResBuilder.BuildSecondary(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (GUILayout.Button("所有衣服", GUILayout.Height(24))) |
| | | { |
| | | |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | if (_item.Type == (int)E_ModelResType.Suit) |
| | | { |
| | | m_ModelResBuilder.BuildClothes(_item.ID); |
| | | m_ModelResBuilder.BuildClothes(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (GUILayout.Button("所有坐骑", GUILayout.Height(24))) |
| | | { |
| | | |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | if (_item.Type == (int)E_ModelResType.Horse) |
| | | { |
| | | m_ModelResBuilder.BuildHorse(_item.ID); |
| | | m_ModelResBuilder.BuildHorse(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | bool _result = EditorUtility.DisplayDialog("温馨提醒", "生成所有换装资源将会耗费比较长的时间, 请记得几点, 是否是需要生成所有的资源, 如果不是, 记得可以去掉不生成的资源,是不是不需要生成已经存在的资源, 如果不需要, 记得勾选[只生成不存在的]", "确认生成", "我按错了"); |
| | | if (_result) |
| | | { |
| | | var _dict = ConfigManager.Instance.GetAllValues<ModelResConfig>(); |
| | | var _dict = Config.Instance.GetAllValues<ModelResConfig>(); |
| | | foreach (var _item in _dict) |
| | | { |
| | | m_ModelResBuilder.BuildModelRes(_item.ID); |
| | | m_ModelResBuilder.BuildModelRes(_item.ID, m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (GUILayout.Button("重命名AssetBundle")) |
| | | { |
| | | ReAssetBundleName(); |
| | | } |
| | | } |
| | | |
| | | private void BuildAllUIAnimatorController() |
| | | { |
| | | string _configPath = EditorUtility.OpenFilePanel("选择配置文件", Application.dataPath + "/Editor/Config", "txt"); |
| | | if (!string.IsNullOrEmpty(_configPath)) |
| | | { |
| | | string[] _modeNames = File.ReadAllLines(_configPath); |
| | | for (int i = 0; i < _modeNames.Length; ++i) |
| | | { |
| | | _modeNames[i] = _modeNames[i].Trim(); |
| | | if (string.IsNullOrEmpty(_modeNames[i])) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | var _kv = _modeNames[i].Split('\t'); |
| | | |
| | | m_NpcResBuilder.BuildNpc(_kv[0], _kv[1], int.Parse(_kv[2]), m_HighMesh); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | static void ExportAnimationClips() |
| | | { |
| | | |
| | | Object[] _selectObjects = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); |
| | | UnityEngine.Object[] _selectObjects = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets); |
| | | if (_selectObjects == null || _selectObjects.Length == 0) |
| | | { |
| | | return; |
| | |
| | | string _assetPath = string.Empty; |
| | | string _newAssetPath = string.Empty; |
| | | string _assetName = string.Empty; |
| | | Object _clip = null; |
| | | UnityEngine.Object _clip = null; |
| | | int _index = 0; |
| | | foreach (var _object in _selectObjects) |
| | | { |