using System.Collections.Generic; using cfg.CharacterCfg; using Framework; using Gameplay.Utils; using UnityEditor; using UnityEngine; namespace CharacterBuilder { public class CharacterBuildData : BaseRoleBuildData { public readonly DataCharacterAttri mainConfig; public readonly List skins; public CharacterBuildData(DataCharacterAttri mainConfig) { this.mainConfig = mainConfig; skins = new List(); errorInfo = null; isChecked = false; var skinConfigList = EditorTableManager.instance.tables.SkinCfg.DataList; for (int i = 0; i < skinConfigList.Count; i++) { var cConfig = skinConfigList[i]; if (cConfig.RoleID == mainConfig.RoleID) { skins.Add(cConfig); } } _InitWeaponConfig(); emojiExt = new EmojiExtInfo(); emojiExt.emojiId = mainConfig.DefaultEmojiImgId; emojiExt.eyebowsColor = mainConfig.EmojiEyeBowsColor; emojiExt.eyesColor = mainConfig.EmojiEyesColor; } private void _InitWeaponConfig() { var weaponIdList = new List(); weaponIdList.Add(mainConfig.WeaponId); // 找到所有突破配置 var breakConfigList = EditorTableManager.instance.tables.CharacterBreak.DataList; for (int i = 0; i < breakConfigList.Count; i++) { var breakConfig = breakConfigList[i]; if (breakConfig.RoleID == mainConfig.RoleID) { if (breakConfig.WeaponId == 0) { continue; } if (weaponIdList.Contains(breakConfig.WeaponId)) { continue; } weaponIdList.Add(breakConfig.WeaponId); } } // 添加所有武器配置 for (int i = 0; i < weaponIdList.Count; i++) { var weaponConfig = EditorTableManager.instance.tables.WeaponConfig.Get(weaponIdList[i]); if (weaponConfig != null) { weaponConfigList.Add(weaponConfig); } else { Debug.LogError($"角色:{mainConfig.NameRead}的武器配置{weaponIdList[i]}不存在,请注意检查配表"); } } } public override string CheckAnims(Dictionary dict) { var defaultSkinNameId = skins[0].NameID; for (int i = 0; i < skins.Count; i++) { var nameId = skins[i].NameID; var checkInfo = _CheckAnims(dict, nameId, defaultSkinNameId); if (!string.IsNullOrEmpty(checkInfo)) { return checkInfo; } } return null; } public override void RebuildAll(Dictionary clipDict) { if (weaponConfigList.Count == 0) { Debug.LogError($"对象:{mainConfig.NameRead}未配置武器,取消导出"); return; } if (skins.Count == 0) { Debug.LogError($"对象:{mainConfig.NameRead}未配置皮肤,取消导出"); return; } var defaultSkinNameId = skins[0].NameID; for (int i = 0; i < skins.Count; i++) { var skinConfig = skins[i]; var prefabPath = PathEx.GetCharacterSrcModelPath(skinConfig.NameID); _Rebuild(clipDict, prefabPath, skinConfig.NameID, defaultSkinNameId); // 将展示用模型放入addressable var displayPath = PathEx.GetCharacterDisplayModelPath(skinConfig.NameID); // 判断资源是否存在 var displayObj = AssetDatabase.LoadAssetAtPath(displayPath); if (displayObj == null) { Debug.LogError($"对象:{mainConfig.NameRead}的展示模型不存在,请注意检查配表:{displayPath}"); continue; } var loadViewTrans = displayObj.transform.GetChild(0); loadViewTrans.localScale = Vector3.one; // 保存展示模型 // 设置为dirty EditorUtility.SetDirty(displayObj); // 保存 AssetDatabase.SaveAssets(); } } } }