public void Move(Vector2 p_Move, bool p_Run, bool p_Jump, Transform p_TransformCamera) { bool _DoAnime = false; Constant.ENUM_STATE_ANIME _StateAnime = Constant.ENUM_STATE_ANIME.STATE_ANIME_WALK; // move if (p_Move != Vector2.zero) { if (m_ModelAnimationCtrl.m_StateAnime == Constant.ENUM_STATE_ANIME.STATE_ANIME_LAND || m_HitSide) { // can not move } else { _DoAnime = true; float _X = p_Move.x * SPEED_MOVE; float _Y = p_Move.y * SPEED_MOVE; if (IsAir()) { // jump, fall, land _DoAnime = false; _X *= RATIO_MOVE_AIR; _Y *= RATIO_MOVE_AIR; } else if (p_Run) { if (m_ModelAnimationCtrl.IsRunning()) { // transition completed _X *= RATIO_RUN; _Y *= RATIO_RUN; } _StateAnime = Constant.ENUM_STATE_ANIME.STATE_ANIME_RUN; } Vector3 _ForwardCamera = Vector3.Scale(p_TransformCamera.forward, new Vector3(1.0f, 0.0f, 1.0f)).normalized; Vector3 _Direction = _ForwardCamera * _Y + p_TransformCamera.right * _X; m_CharCtrl.Move(_Direction * Time.deltaTime); } } // jump if (p_Jump) { if (!IsAir()) { _DoAnime = true; m_Gravity = SPEED_JUMP; _StateAnime = Constant.ENUM_STATE_ANIME.STATE_ANIME_JUMP; } } if (_DoAnime) { m_ModelAnimationCtrl.Animation(_StateAnime); } }
private void Update() { if (m_StateAnime == Constant.ENUM_STATE_ANIME.STATE_ANIME_LAND) { if (m_Animator.GetCurrentAnimatorStateInfo(ID_BASE_LAYER).IsName(ANIME_IDLE)) { // land to idle m_StateAnime = Constant.ENUM_STATE_ANIME.STATE_ANIME_IDLE; } } }
public void Animation(Constant.ENUM_STATE_ANIME p_StateAnime) { if (m_StateAnime == p_StateAnime) { return; } foreach (AnimatorControllerParameter _Prm in m_Animator.parameters) { if (_Prm.type == AnimatorControllerParameterType.Bool) { m_Animator.SetBool(_Prm.name, false); } } switch (p_StateAnime) { case Constant.ENUM_STATE_ANIME.STATE_ANIME_WALK: m_Animator.SetBool(PRM_TO_WALK, true); break; case Constant.ENUM_STATE_ANIME.STATE_ANIME_RUN: m_Animator.SetBool(PRM_TO_RUN, true); break; case Constant.ENUM_STATE_ANIME.STATE_ANIME_JUMP: m_Animator.SetBool(PRM_TO_JUMP, true); break; case Constant.ENUM_STATE_ANIME.STATE_ANIME_FALL: m_Animator.SetBool(PRM_TO_FALL, true); break; case Constant.ENUM_STATE_ANIME.STATE_ANIME_LAND: m_Animator.SetBool(PRM_TO_LAND, true); break; default: // idle break; } m_StateAnime = p_StateAnime; }
private void Start() { m_Animator = GetComponent <Animator>(); m_StateAnime = Constant.ENUM_STATE_ANIME.STATE_ANIME_IDLE; }