2Dのキャラクターのアニメーションを作成する
目次
- Animation Controllerの作成
- Animationの作成
- スクリプトからパラメータを制御する
はじめに
今回の記事は前回の記事で作成したキャラクターにアニメーションをつけることを記録として残したものです。
Animation Controllerの作成
Animationを作成
Idleアニメーションを作成
- 今回はキャラクターが何もしないで立っている状態のアニメーションを例にとってAnimationの作り方を説明します。
AnimationはCreate->Animationから作成できます。
下記の画像のように基本的にはLoop Timeを有効にします。こうすることでアニメーションが1回実行されて終了するのではなく、継続的にアニメーションを実行してくれます。
これを先ほど作成したAnimation Controllerにドラドロすることでノードをつなぐ形にできました。
⇩こんな感じ
そしてこのAnimation ControllerをBoneを持ったキャラクターにアタッチすることでAnimationの作成をすることができます。
逆に言えば、Animation ControllerをBoneを持ったキャラクターにアタッチしない限りはAnimationの作成ができないので注意!
今回はキャラクターの動きを制御します。
Animationタブの録画ボタンを押します。
するとAnimationタブの背景が若干赤くなります。これは現在録画状態であることを表しています。
この状態でSceneビューのboneを動かすとboneの状態を記録してくれます。
そして頑張って作った結果がこれ⇩
途中で再生ボタンを使用しながらどんな感じ化を確認するとやりやすいです。
今回は動きだけを制御しましたがこのAnimationのこのタイミングで関数を呼び出すなんてこともできます。
スクリプトからパラメータを制御する
- 例ではIdle Animationしか作成していませんがRun AnimationやJump Animationも作成してAnimation ControllerにアタッチしてTransitionも編集したのが下記の写真です。
ここで写真の右側にパラメータが映っていると思います。これはTransitionが作動するかどうかを制御しているパラメータです。
下記の写真はJump Animationですが「isJumping」パラメータがtrueになったときのみ作動するように赤い部分で制御しています。
これらのパラメータはスクリプトから変更させます。
下記のコードがAnimation Controllerのパラメータを制御している部分を抜粋したコードです。
void Awake()
{
animator = GetComponent<Animator>();
}
void Update()
{
isGrounded = Physics2D.Raycast(transform.position, Vector2.down, groundLine, groundLayer);
if (animator != null)
{
animator.SetBool("isJumping", !isGrounded);
float horizontalSpeed = Mathf.Abs(rb.velocity.x);
animator.SetFloat("Speed", horizontalSpeed);
}
}
上記のコードのようにAniamtion Controllerで設定したパラメータの名前を指定してあげることでそのパラメータの値を操作することができます。