NLDClient-yudde/ProjectNLD/Assets/Editor/CharacterBuilder/CharacterBuildData.cs

120 lines
4.2 KiB
C#
Raw Normal View History

2023-12-19 18:07:31 +08:00
using System.Collections.Generic;
using cfg.CharacterCfg;
2023-12-20 11:46:40 +08:00
using Framework;
2024-01-15 12:39:20 +08:00
using Gameplay.Utils;
using UnityEditor;
2023-12-20 11:46:40 +08:00
using UnityEngine;
2023-12-19 18:07:31 +08:00
namespace CharacterBuilder
{
public class CharacterBuildData : BaseRoleBuildData
2023-12-19 18:07:31 +08:00
{
public readonly DataCharacterAttri mainConfig;
public readonly List<DataCharacterSkin> skins;
2023-12-20 11:46:40 +08:00
public CharacterBuildData(DataCharacterAttri mainConfig)
{
this.mainConfig = mainConfig;
skins = new List<DataCharacterSkin>();
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);
}
}
weaponConfig = EditorTableManager.instance.tables.WeaponConfig.Get(mainConfig.WeaponId);
2023-12-29 17:00:23 +08:00
emojiExt = new EmojiExtInfo();
emojiExt.emojiId = mainConfig.DefaultEmojiImgId;
emojiExt.eyebowsType = mainConfig.EmojiEyeBowsType;
emojiExt.eyebowsColor = mainConfig.EmojiEyeBowsColor;
emojiExt.eyesColor = mainConfig.EmojiEyesColor;
2024-01-30 15:59:14 +08:00
attackAnimOrder = this.mainConfig.AttackAnimOrder;
2024-01-30 16:07:34 +08:00
reloadAnimOrder = this.mainConfig.ReloadAnimOrder;
2023-12-20 11:46:40 +08:00
}
public override string CheckAnims(Dictionary<string, AnimationClip> dict)
2023-12-20 11:46:40 +08:00
{
for (int i = 0; i < skins.Count; i++)
{
var nameId = skins[i].NameID;
var checkInfo = _CheckAnims(dict, nameId);
if (!string.IsNullOrEmpty(checkInfo))
{
return checkInfo;
}
}
return null;
}
public override void RebuildAll(Dictionary<string, AnimationClip> clipDict)
2023-12-20 11:46:40 +08:00
{
2024-01-02 19:26:01 +08:00
if (weaponConfig == null)
{
Debug.LogError($"对象:{mainConfig.NameRead}未配置武器,取消导出");
return;
}
if (skins.Count == 0)
{
Debug.LogError($"对象:{mainConfig.NameRead}未配置皮肤,取消导出");
return;
}
2023-12-20 11:46:40 +08:00
for (int i = 0; i < skins.Count; i++)
{
var skinConfig = skins[i];
2024-01-17 19:03:04 +08:00
var prefabPath = PathEx.GetCharacterSrcModelPath(skinConfig.NameID);
2024-01-15 12:39:20 +08:00
_Rebuild(clipDict, prefabPath, skinConfig.NameID);
// 将展示用模型放入addressable
2024-01-15 12:39:20 +08:00
var displayPath = PathEx.GetCharacterDisplayModelPath(skinConfig.NameID);
// 判断资源是否存在
var displayObj = AssetDatabase.LoadAssetAtPath<GameObject>(displayPath);
if (displayObj == null)
{
Debug.LogError($"对象:{mainConfig.NameRead}的展示模型不存在,请注意检查配表:{displayPath}");
continue;
}
2024-01-17 18:58:22 +08:00
var loadViewTrans = displayObj.transform.GetChild(0);
loadViewTrans.localScale = Vector3.one;
// 保存展示模型
// 设置为dirty
EditorUtility.SetDirty(displayObj);
// 保存
AssetDatabase.SaveAssets();
_AddToAddressables(displayPath);
}
}
private void _AddToAddressables(string assetPath)
{
2024-02-27 15:07:59 +08:00
#if USE_ADDRESSABLES
// 获取 AddressableAssetSettings
var settings = AddressableAssetSettingsDefaultObject.Settings;
// 获取或创建一个资源组
var group = settings.FindGroup("SplitCharacter");
if (group == null)
{
Debug.LogError("找不到资源组:SplitCharacter");
return;
2023-12-20 11:46:40 +08:00
}
// 创建或移动条目
var guid = AssetDatabase.AssetPathToGUID(assetPath);
settings.CreateOrMoveEntry(guid, group);
2024-02-27 15:07:59 +08:00
#endif
2023-12-20 11:46:40 +08:00
}
2023-12-20 11:46:40 +08:00
2023-12-19 18:07:31 +08:00
}
}