using UnityEngine; /// /// 角色动画控制器:管理伤者和施救者的动画状态切换。 /// 挂在角色根 GameObject 上,引用其 Animator 组件。 /// public class CharacterAnimController : MonoBehaviour { public enum CharacterRole { Patient, Rescuer } public CharacterRole Role = CharacterRole.Patient; [Header("Animator 引用")] [SerializeField] private Animator _animator; private static readonly int ParamRun = Animator.StringToHash("IsRunning"); private static readonly int ParamJump = Animator.StringToHash("Jump"); private static readonly int ParamFall = Animator.StringToHash("Fall"); private static readonly int ParamLying = Animator.StringToHash("IsLying"); private static readonly int ParamCrouch = Animator.StringToHash("Crouch"); private static readonly int ParamCheck = Animator.StringToHash("Check"); private static readonly int ParamBandage = Animator.StringToHash("Bandage"); private static readonly int ParamRemoveShoe = Animator.StringToHash("RemoveShoe"); private void Awake() { if (_animator == null) _animator = GetComponent(); } public void PlayRun() { if (_animator == null) return; _animator.SetBool(ParamRun, true); } public void StopRun() { if (_animator == null) return; _animator.SetBool(ParamRun, false); } public void TriggerJump() { _animator?.SetTrigger(ParamJump); } public void TriggerFall() { _animator?.SetTrigger(ParamFall); _animator?.SetBool(ParamLying, true); } public void SetLying(bool lying) { _animator?.SetBool(ParamLying, lying); } public void PlayCrouch() { _animator?.SetBool(ParamCrouch, true); } public void StopCrouch() { _animator?.SetBool(ParamCrouch, false); } public void TriggerCheck() { _animator?.SetTrigger(ParamCheck); } public void TriggerBandage() { _animator?.SetTrigger(ParamBandage); } public void TriggerRemoveShoe() { _animator?.SetTrigger(ParamRemoveShoe); } public void TriggerByName(string triggerName) { if (_animator == null || string.IsNullOrEmpty(triggerName)) return; _animator.SetTrigger(Animator.StringToHash(triggerName)); } }