using System; using UnityEngine; using Object = System.Object; public class KnightController : MonoBehaviour { private Animator animator; private AnimationState animationState; class AnimationState { public (string name, float value, float prev_value) _speed = ("speed", 0f, 0f); public (string name, float value, float prev_value) _atk_speed = ("atk_speed", 1.0f, 1.0f); public (string name, bool value, bool prev_value) _attack = ("attack", false, false); public (string name, bool value, bool prev_value) _run = ("run", false, false); public void Init(GameObject obj) { Animator animator = obj.GetComponent(); var parameters = animator.parameters; foreach (var param in parameters) { switch (param.type) { case AnimatorControllerParameterType.Float: if (param.name == "speed") _speed = (param.name, animator.GetFloat(param.name), animator.GetFloat(param.name)); if (param.name == "atk_speed") _atk_speed = (param.name, animator.GetFloat(param.name), animator.GetFloat(param.name)); break; case AnimatorControllerParameterType.Bool: if (param.name == "attack") _attack = (param.name, animator.GetBool(param.name), animator.GetBool(param.name)); if (param.name == "run") _run = (param.name, animator.GetBool(param.name), animator.GetBool(param.name)); break; } } } } enum MotionStat { Idle, Walk, Run, Attack, Hit, Jump } enum Parameter { speed, atk_speed, attack, run } MotionStat currentStat = MotionStat.Idle; void Start() { animator = GetComponent(); animationState = new AnimationState(); animationState.Init(this.gameObject); animationState._attack.value = true; // Debug.Log(animationState.GetField(AnimationState.Parameter.atk_speed)); } void Update() { } public void Hit() { animator.SetBool(Enum.GetName(typeof(Parameter),Parameter.attack), false); // animationState.SetParameter(AnimationState.Parameter.attack, false); // animator.SetBool("attack", false); Debug.Log("Knight Hit!"); } }