using System.Collections.Generic; using Sirenix.OdinInspector; using SLSUtilities.FunctionalAnimation; using UnityEngine; using UnityEngine.Serialization; namespace Cielonos.MainGame.Characters { [CreateAssetMenu(fileName = "BaseAnimationGroup", menuName = "Cielonos/Characters/BaseAnimationGroup")] public class BaseAnimationGroup : SerializedScriptableObject { public AnimationClip landIdle; public List landIdleExtras; public AnimationClip landWalkForward, landWalkBack, landWalkLeft, landWalkRight; public AnimationClip landRunForward, landRunBack, landRunLeft, landRunRight; public AnimationClip jumpStart; public AnimationClip inAir; public AnimationClip jumpLand; public FuncAnimData getHitMediumFront, getHitMediumBack, getHitMediumLeft, getHitMediumRight; public FuncAnimData getHitHeavyFront, getHitHeavyBack, getHitHeavyLeft, getHitHeavyRight; public AnimationClip riseUpFront, riseUpBack, riseUpLeft, riseUpRight; public AnimationClip incapacitation, death; public FuncAnimData dash; public FuncAnimData dodge; public void SetUp(AnimationSubcontrollerBase animSc) { if (animSc is PlayerAnimationSubcontroller playerAnimSc) { FunctionalAnimationSubmodule funcAnimSm = animSc.fullBodyFuncAnimSm; // 基础动画 clip,由调用方管理批处理生命周期 playerAnimSc.SetOverride("LandIdle", landIdle); playerAnimSc.SetOverride("LandWalkForward", landWalkForward); playerAnimSc.SetOverride("LandWalkBack", landWalkBack); playerAnimSc.SetOverride("LandWalkLeft", landWalkLeft); playerAnimSc.SetOverride("LandWalkRight", landWalkRight); playerAnimSc.SetOverride("LandRunForward", landRunForward); playerAnimSc.SetOverride("LandRunBack", landRunBack); playerAnimSc.SetOverride("LandRunLeft", landRunLeft); playerAnimSc.SetOverride("LandRunRight", landRunRight); playerAnimSc.SetOverride("JumpStart", jumpStart); playerAnimSc.SetOverride("InAir", inAir); playerAnimSc.SetOverride("JumpLand", jumpLand); // FuncAnimData 通过 Reset → Add → SetOverride 进入同一缓冲区 if (getHitMediumFront) funcAnimSm.Reset(getHitMediumFront); if (getHitMediumBack) funcAnimSm.Reset(getHitMediumBack); if (getHitMediumLeft) funcAnimSm.Reset(getHitMediumLeft); if (getHitMediumRight) funcAnimSm.Reset(getHitMediumRight); if (getHitHeavyFront) funcAnimSm.Reset(getHitHeavyFront); if (getHitHeavyBack) funcAnimSm.Reset(getHitHeavyBack); if (getHitHeavyLeft) funcAnimSm.Reset(getHitHeavyLeft); if (getHitHeavyRight) funcAnimSm.Reset(getHitHeavyRight); if (dash) funcAnimSm.Reset(dash); if (dodge) funcAnimSm.Reset(dodge); } } } }