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;
|
2024-01-04 16:21:26 +08:00
|
|
|
|
using UnityEditor;
|
2023-12-20 11:46:40 +08:00
|
|
|
|
using UnityEngine;
|
2023-12-19 18:07:31 +08:00
|
|
|
|
namespace CharacterBuilder
|
|
|
|
|
|
{
|
2023-12-20 13:47:28 +08:00
|
|
|
|
public class CharacterBuildData : BaseRoleBuildData
|
2023-12-19 18:07:31 +08:00
|
|
|
|
{
|
2023-12-20 13:47:28 +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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-11 16:27:33 +08:00
|
|
|
|
_InitWeaponConfig();
|
2023-12-29 17:00:23 +08:00
|
|
|
|
|
|
|
|
|
|
emojiExt = new EmojiExtInfo();
|
|
|
|
|
|
emojiExt.emojiId = mainConfig.DefaultEmojiImgId;
|
|
|
|
|
|
emojiExt.eyebowsColor = mainConfig.EmojiEyeBowsColor;
|
|
|
|
|
|
emojiExt.eyesColor = mainConfig.EmojiEyesColor;
|
2024-01-30 15:59:14 +08:00
|
|
|
|
|
2023-12-20 11:46:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-11 16:27:33 +08:00
|
|
|
|
private void _InitWeaponConfig()
|
|
|
|
|
|
{
|
|
|
|
|
|
var weaponIdList = new List<int>();
|
|
|
|
|
|
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
|
|
|
|
|
|
{
|
2026-02-06 13:49:24 +08:00
|
|
|
|
Debug.LogError($"角色:{mainConfig.NameRead}的武器配置{weaponIdList[i]}不存在,请注意检查配表");
|
2024-11-11 16:27:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-20 13:47:28 +08:00
|
|
|
|
public override string CheckAnims(Dictionary<string, AnimationClip> dict)
|
2023-12-20 11:46:40 +08:00
|
|
|
|
{
|
2024-11-12 12:30:55 +08:00
|
|
|
|
var defaultSkinNameId = skins[0].NameID;
|
2023-12-20 11:46:40 +08:00
|
|
|
|
for (int i = 0; i < skins.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var nameId = skins[i].NameID;
|
2024-11-12 12:30:55 +08:00
|
|
|
|
var checkInfo = _CheckAnims(dict, nameId, defaultSkinNameId);
|
2023-12-20 11:46:40 +08:00
|
|
|
|
if (!string.IsNullOrEmpty(checkInfo))
|
|
|
|
|
|
{
|
|
|
|
|
|
return checkInfo;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-12-20 13:47:28 +08:00
|
|
|
|
public override void RebuildAll(Dictionary<string, AnimationClip> clipDict)
|
2023-12-20 11:46:40 +08:00
|
|
|
|
{
|
2024-11-11 16:27:33 +08:00
|
|
|
|
if (weaponConfigList.Count == 0)
|
2024-01-02 19:26:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"对象:{mainConfig.NameRead}未配置武器,取消导出");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (skins.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"对象:{mainConfig.NameRead}未配置皮肤,取消导出");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-11-12 12:30:55 +08:00
|
|
|
|
|
|
|
|
|
|
var defaultSkinNameId = skins[0].NameID;
|
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-11-12 12:30:55 +08:00
|
|
|
|
_Rebuild(clipDict, prefabPath, skinConfig.NameID, defaultSkinNameId);
|
2024-01-04 16:21:26 +08:00
|
|
|
|
|
|
|
|
|
|
// 将展示用模型放入addressable
|
2024-01-15 12:39:20 +08:00
|
|
|
|
var displayPath = PathEx.GetCharacterDisplayModelPath(skinConfig.NameID);
|
2024-01-04 16:21:26 +08:00
|
|
|
|
// 判断资源是否存在
|
|
|
|
|
|
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();
|
2024-01-04 16:21:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-12-19 18:07:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|