// Update is called once per frame void Update() { m_ElapsedTime += Time.deltaTime; m_PositionRef = m_RootRef.transform.position; switch (m_State) { case AnimationState.Idle: m_PositionRef.y = 0.5f * Mathf.Sin(Define.TIME_IDLE * m_ElapsedTime); m_RootRef.transform.position = m_PositionRef; break; case AnimationState.Attack: float ratio = Mathf.Min(m_ElapsedTime / Define.TIME_ATTACK_START, 1.0f); float targetRot = (m_ScaleFactor > 0) ? 30.0f * ratio : 150.0f * ratio; float targetScale = 1.0f + 1.0f * ratio; m_RootRef.transform.rotation = Quaternion.AngleAxis(targetRot, Vector3.up); m_RootRef.transform.localScale = new Vector3(m_ScaleFactor * targetScale, targetScale, targetScale); m_PositionRef.z = -5.0f * ratio; m_RootRef.transform.position = m_PositionRef; ChangeAnimationState(AnimationState.Attack_DoAttack, Define.TIME_ATTACK_START); break; case AnimationState.Attack_DoAttack: float attackRatio = Mathf.Min(m_ElapsedTime / Define.TIME_ATTACK_DO, 1.0f); m_PositionRef.x = m_ScaleFactor * attackRatio * 1.0f; m_RootRef.transform.position = m_PositionRef; ChangeAnimationState(AnimationState.Attack_End, Define.TIME_ATTACK_DO); break; case AnimationState.Attack_End: ChangeAnimationState(AnimationState.Idle, Define.TIME_ATTACK_END, true); break; case AnimationState.Hitted: m_PositionRef = m_TransformRef.m_PositionRef; m_PositionRef.x += 2.0f * Random.Range(-1.0f, 1.0f); m_PositionRef.y += 2.0f * Random.Range(-1.0f, 1.0f); m_RootRef.transform.position = m_PositionRef; ChangeAnimationState(AnimationState.Hitted_BreakBone, Define.TIME_SKIPED); break; case AnimationState.Hitted_BreakBone: // bone animation Character selfRef = GetComponent <Character>(); GlobalSingleton.GetFxManager().DoBreakBoneAnimation(ref selfRef); ChangeAnimationState(AnimationState.Hitted_Straight, Define.TIME_SKIPED); break; case AnimationState.Hitted_Straight: m_PositionRef = m_TransformRef.m_PositionRef; m_PositionRef.x += 2.0f * Random.Range(-1.0f, 1.0f); m_PositionRef.y += 2.0f * Random.Range(-1.0f, 1.0f); m_RootRef.transform.position = m_PositionRef; ChangeAnimationState(AnimationState.Idle, Define.TIME_HITTED, true); break; case AnimationState.Defend: GlobalSingleton.GetFxManager().DoDefendAnimation(); ChangeAnimationState(AnimationState.Idle, Define.TIME_DEFEND, true); break; } }