2017-04-08 5 views
-1
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Animations : MonoBehaviour 
{ 
    public enum AnimatorStates 
    { 
     WALK, RUN, IDLE 
    } 

    private Animator _anim; 

    void Awake() 
    { 
     _anim = GetComponent<Animator>(); 
    } 

    public void PlayState(AnimatorStates state) 
    { 
     string animName = string.Empty; 
     switch (state) 
     { 
      case AnimatorStates.WALK: 
       animName = "Walk"; 
       break; 
      case AnimatorStates.RUN: 
       animName = "Run"; 
       break; 
     } 
     if (_anim == null) 
      _anim = GetComponent<Animator>(); 

     _anim.Play(animName); 
    } 

    void Update() 
    { 
     if (MyCommands.walkbetweenwaypoints == true) 
     { 
      PlayState(AnimatorStates.RUN); 
     } 
     else 
     { 
      PlayState(AnimatorStates.IDLE); 
     } 
    } 
} 

コードは問題なく動作していますが、アップデートでPlayStateを何度も呼び出すのは正しいとは限りません。 RUNまたはIDLE状態の場合、Update関数で1回だけ呼び出すようにしたいと思います。アニメーションコマンドを更新機能で一度だけ設定するにはどうすればよいですか?

ウォークウェイウェイポイントが真または偽になると、Update機能ではノンストップ状態を呼び出します。

答えて

1

保存状態が実際に変更された場合の更新方法と更新のみでの最後の状態:

AnimatorStates lastState = AnimatorStates.IDLE; 
public void PlayState(AnimatorStates state) 
{ 
    if(state != lastState) 
    { 
     string animName = string.Empty; 
     switch (state) 
     { 
      case AnimatorStates.WALK: 
       animName = "Walk"; 
       break; 
      case AnimatorStates.RUN: 
       animName = "Run"; 
       break; 
     } 
     if (_anim == null) 
      _anim = GetComponent<Animator>(); 

     _anim.Play(animName); 

     lastState = state; 
    } 
} 
+0

どのように私は、アップデート機能で、それを使うのですか? WALK状態を選択した場合の状態WALKも含める方法。 3つの状態があります。 –

+0

私が 'PlayState'メソッドに提案した変更は、 'PlayState'に与えられた状態が最後の状態と異なる場合を除いて、 '_anim'に対して何も行われません。これはあなたの質問に対する答えとして十分です。 'WALK'状態は、他の状態が 'PlayState'メソッド内で動作しているのと同じ方法で動作します。しかし、それを 'Update'メソッドで使用するだけです。サンプルコードでこれを使用していないだけです。 – Ibrahim

関連する問題