Merge pull request 'feature/implement-a3dcombineaction' (#353) from feature/implement-a3dcombineaction into develop

Reviewed-on: https://git.pthub.vn/Unity/perfect-world-unity/pulls/353
This commit is contained in:
namth
2026-04-16 09:00:22 +00:00
5 changed files with 9608 additions and 1 deletions
@@ -5802,6 +5802,7 @@ GameObject:
- component: {fileID: 951485137070164928}
- component: {fileID: 9219383120328021403}
- component: {fileID: 1518080651347164297}
- component: {fileID: 7529290832392690387}
m_Layer: 0
m_Name: "\u767D\u864E"
m_TagString: Untagged
@@ -6507,6 +6508,19 @@ MonoBehaviour:
- {fileID: 7400000, guid: 62aafa98ffa920b4d9e284790c841e32, type: 2}
- {fileID: 7400000, guid: 766ba769c8bc5b04aa57515965db8032, type: 2}
- {fileID: 7400000, guid: 3a66446861064bc43935ccbcae3086a1, type: 2}
--- !u!114 &7529290832392690387
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6482371892830010618}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 472c24b873524423f95454131fd11da6, type: 3}
m_Name:
m_EditorClassIdentifier:
combinedActionSO: {fileID: 11400000, guid: 25d808d1c15469e4894091fbadfd23f3, type: 2}
--- !u!1 &6577539202937869231
GameObject:
m_ObjectHideFlags: 0
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 25d808d1c15469e4894091fbadfd23f3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
+25 -1
View File
@@ -721,6 +721,31 @@ namespace BrewMonster
}
m_pPlayerCECModel.SetSkeletonBuilder(changeModel.GetComponentInChildren<SkeletonBuilder>());
m_pPlayerCECModel.SetTransform(changeModel.transform);
// Keep action map in sync with the currently active model (major/dummy).
// 让动作映射与当前激活模型(主模型/变身模型)保持一致。
CombineActHolder combineActHolder = changeModel.GetComponentInChildren<CombineActHolder>();
if (combineActHolder != null)
{
try
{
if (combineActHolder.ActionSO != null)
{
m_pPlayerCECModel.SetCombinedAction(combineActHolder.ActionSO);
}
else
{
BMLogger.LogWarning($"[CECPlayer] RefreshCECModel: CombineActHolder.ActionSO is null on '{changeModel.name}'.");
}
}
catch (Exception ex)
{
BMLogger.LogWarning($"[CECPlayer] RefreshCECModel: Failed to read CombineActHolder.ActionSO on '{changeModel.name}': {ex.Message}");
}
}
else
{
BMLogger.LogWarning($"[CECPlayer] RefreshCECModel: CombineActHolder not found on '{changeModel.name}'.");
}
m_pPlayerCECModel.InitializeSkeletonBuilder();
}
/// <summary>
@@ -3791,7 +3816,6 @@ namespace BrewMonster
// back to major model is a synchronous operation
ApplyShapeModelChange(GetMajorModel());
}
OnModelChange(GetMajorModel());
}
void SetShape(byte iShape)
{
+4
View File
@@ -235,6 +235,10 @@ namespace BrewMonster
/// <param name="modelRoot">The root GameObject of the model to search for NamedAnimancerComponent / 要搜索NamedAnimancerComponent的模型根GameObject</param>
public void RefreshNamedAnimancer(GameObject modelRoot = null)
{
// Reset old runtime state when swapping model roots to avoid stale AnimancerState references.
// 切换模型根节点时重置旧运行时状态,避免持有过期的AnimancerState引用。
_currentState = null;
_currentAnimationName = null;
if (modelRoot != null)
{
// Search specifically within the model GameObject's hierarchy