前回の記事で、Animatorコンポーネントが持つ SetBool()
メソッドを活用して、どのキーも押されていなければ if(!Input.anyKey)
でIdling状態のアニメーションを、いずれかのキーが押されたら歩いているアニメーションを発動するプログラムをご紹介しました。
今回は左右の動きも併せて作成し、アニメーション発動のタイミングを管理していきたいと思います。
Youtubeショート動画「一分間Unity講座 Animatiの発動タイミングと速度の調整」の補足説明にもなっていますので、気になる方は次の動画も併せてご確認ください。
左右の動きのプログラム
前回のコードを改造し、「Dキー」が押されたら右に、「Aキー」が押されたら左に移動するプログラムを作成してみましょう。
void Update()
{
if (!Input.anyKey) //何も押されていなければ
{
animator.SetBool("IsWalk", false); //待機状態のアニメーション
}
else //何かが押されていたら
{
animator.SetBool("IsWalk", true); //走るアニメーション
//Dキーた押されている間
if(Input.GetKey(KeyCode.D))
{
//右に移動
transform.position += transform.right * Time.deltaTime;
//右を向く
transform.rotation = Quaternion.Euler(0, 0, 0);
}
//Aキーが押されている間
if (Input.GetKey(KeyCode.A))
{
//左に移動
transform.position += transform.right * Time.deltaTime;
//左を向く
transform.rotation = Quaternion.Euler(0, 180, 0);
}
}
}
この状態で左右の動きができました。
Animationの発動タイミング
現状、移動と同時にAnimationが動くのではなく、若干遅れて発動していると思います。
UnityではAnimationのTransitionを作成した場合、初期状態では下の様に「Has Exit TIme」にチェックが入っている(true)状態になります。
「Has Exit TIme」が true のとき、アニメーションは終了時間(Exit Time)に到達するまで、Transition は発生しません。つまり、アニメーションが完全に再生されてから次のアニメーションに移行します。
一方、「Has Exit TIme」が false の時は、設定された条件が満たされたならば現在のアニメーションが途中であっても次のアニメーションに即座に切り替わります。
今回は、「PicoWalking」⇒「PicoIdle」、「PicoIdle」⇒「PicoWalking」どちらの条件の時も、「Has Exit TIme」を false にしておきます。
- アニメーションの連続性: 滑らかなアニメーションの切り替えを保ちたい場合は、Has Exit Timeを有効にすることが多いです。
- 反応性: ゲームプレイのレスポンスを重視する場合や、特定の条件に即座に反応させたい場合は、Has Exit Timeを無効にすることが一般的です。
AnimationのSpeed
サンプルでは PicoIdling のアニメーションがとても速いようです。Animationの速度を調整する方法はいくつかありますが、今回は2つの方法をご紹介します。
AnimationClip の調整
AnimationClip を作成したタイミングでは、2つの素材が0.01秒間隔で詰まって配置されます。
この間隔をずらすことで、Animationの速度を調整することができます。しかし、2つ目素材の直後に1つ目の素材が呼び出されるので、1枚目の素材を最終フレームに配置するなど、タイミングに留意する必要があります。
素材によって違うタイミングで繰り返されるAnimationなどで活用する方法です。
Animation の speed
各Animation の Inspector の Speedプロパティ を直接変更することで、Animationの速度が変更します。
こちらは比較的簡単に変更することができるので、おすすめです。
また次の様にプログラムから指定することもできます。
Animator animator; //Animatorコンポーネントを管理する変数
void Start()
{
//animator にAnimatorコンポーネント代入
animator = GetComponent<Animator>();
animator.speed = 0.2f; //Animationのspeed を0.2fに
}
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。