🤸

unityでキャラクターの2Dアニメーションを作成する #4 アニメーション作成編

2024/03/19に公開

Unityを使って 2Dアニメーションを作ります。
備忘メモも兼ねて、記事に起こそうと思います。

おさらい

今までの内容をおさらいすると以下ができるようになりました。

  • Boneを動かすことでポーズの変化
  • 表情をSprite libraryによって変化させた
  • エフェクトを実行するイベントを作成

これらを実際にアニメーションという形で実行できるように設定します。

アニメーションを作成する

animatorを見てみると初期状態では3つほどの枠しか定義されていません。
ここにアニメーションを追加していきます。

WindowタブからAnimationを開きます。

紐づいたGameObjectにアニメーションがないとCreateボタンが表示されています。
このまま最初のアニメーションを作成しましょう。

名前は「idle」などとしておきます。
すると新規クリップが追加され、「idle」状態の設定画面となりました。

animatorにも「idle」が追加され、それが初期状態に設定されました。

アニメーションを作成する

早速録画ボタンを押して、アニメーションを作成します。
録画中の状態でけいこちゃんのポーズを変更するとと右側のタイムラインに◇マークが生成されます。

タイムラインを動かしながらポーズを変更し◇マークを生成していきます。

この状態で再生ボタンを押すと、、、

これがけいこちゃんのデフォルト立ち絵になります。

この要領でクリップを作成していきます。

Sprite libraryの切り替えを行う

Sprite libraryもアニメーションから切り替えることができます。
録画ボタン実行中にSprite Resolverから切り替えを行うとBoneの時と同様に◇マークが生成されます。
その後生成されたKeyをすべて選択し右クリック、Both TanjentをConstantに変更します。

Sprite Resolverは切り替えるパラメーターを保持しているようで、それを連続的にではなく、
Keyのタイミングで切り替える必要があります。

eventでエフェクトを挿入する

タイムラインはインスペクターから触れる位置や向きを設定できるほかオブジェクトのオンオフも設定できます。
またeventを追加することでスクリプトを実行することもできます。

Add event をクリックするとタイムライン上部にタグが設定されます。

クリックするとインスペクターからevent時に実行する関数を選択できます。
この関数内にスクリプトの実行したり、パーティクルを作動させることもできます。

状態遷移を実装する

クリップできたらアニメーションの遷移を考えます。
各状態で右クリックするとMake Transitionが選択できます。

すると状態から状態への矢印を作成することができます。
この矢印があると対象の状態に自動で遷移させることができます。

このままでは「idle」実行後に必ず「walk」が実行されてしまうため、条件を作成します。

まずanimatorにパラメーターを定義します。

次に対象の矢印を選択し、conditionにパラメーターを使った条件文を設定します。

Triggerは単発の状態遷移に対しBoolは恒常的に条件を作動させることができます。
こうすることで条件に合致する時のみ状態遷移させることができます。

conditionはスクリプトから簡単にON/OFFが可能です。Triggerの場合はONのみ実装すればOK
テキトーに50フレーム毎にTriggerをキックするスクリプトです。

SetTrigger.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SetTrigger : MonoBehaviour
{
    Animator animator;
    int triggerInterval = 50;

    // Start is called before the first frame update
    void Start() { animator = GetComponent<Animator>(); }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0) && triggerInterval >= 50)
        {
            animator.SetTrigger("WalkTrigger");
            triggerInterval = 0;
        }
        else { triggerInterval = triggerInterval + 1; }

    }
}

各状態からの遷移を定義できるほかに「Any State」からTransitionを伸ばすことで、任意の状態から好きな状態に遷移することができます。

最後に

今回は以上です。
またアニメーション関連の投稿は以上となりますが、気が向けば他の内容も追記するかも、、?

2Dアニメーションは一枚の絵からさまざまなポーズを作成できたり、思ったより自由に動かせて楽しかったりオススメです。
お絵描きが苦手な開発者でもキャラクターを簡単に作成できるのは夢がありますよね。

以上、最後までお読み頂きありがとうございました。

Discussion