LoginSignup
11
11

More than 3 years have passed since last update.

【Unity】任意のタイミングでanimationを発動させるやり方【animation/animator】

Last updated at Posted at 2020-07-21

この記事で書かれていること

  • 通常animationから作成してanimatorも自動生成された場合、常に実行時からanimationが動きます。
  • 下図のように、animatorと組み合わせることで、スクリプトからキー押下など任意のタイミングで、一回だけanimationを動かすといったことも可能になります。
  • この記事では、そのやり方について解説していきます。
  • ↓動画解説はコチラから↓
  • 【Unity】任意のタイミングでanimationを発動させるやり方【animation/animator】

animatorで任意のタイミングでanimationを動かす.gif

animationのその他のテクニックについてこちらから

手順

  1. animationの作成
  2. animatorの編集
  3. スクリプトの作成
  4. 動作確認

それぞれ以下に書いていきます。

1. animationの作成

  • 下記記事を参考にして、[Window]メニューから[animation]を追加して、任意のanimationを作成してください。
  • 【Unity】ノンコーディングでオブジェクトを動かしたい【Animation】
  • 今回のオブジェクトは、Cubeで進めていきます。 a01のコピー.png
  • animationのファイル名は「cubeanim」と設定、animatorのファイル名は「Cube」と自動生成されます。 a01のコピー2.png
  • Cubeのanimationは下図のとおりとなります。
    スクリーンショット 2020-07-21 10.03.08.png

  • 下図のように、まずはanimationが動けばokです。
    cubeanim.gif

  • また、「アニメーションは1回だけでよい」場合、
    下図のように、cubeanimのインスペクターウィンドウで、
    「Loop Time」のチェックを外します。
    スクリーンショット 2020-07-21 11.09.17.png

2. animatorの編集

  • 自動生成されたanimatorは下図の通りとなります。

  • この状態では、実行時からanimationが動くので、今回はanimatorも編集していきます。
    a01のコピー3.png

  • さて、このあとのanimatorコントローラー内にあるオレンジのブロックである「cubeanim」の編集の仕方ですが、『泥臭いやり方』と『イケてるやり方』の二種類をご紹介しますね。


①泥臭いやり方

  • まずは、自動生成された、オレンジ色の「cubeanim」をDeleteで削除します。
    スクリーンショット 2020-07-21 10.10.14.png

  • オレンジ色の「cubeanim」を削除後、
    空いている場所で[右クリック]-[Create State]-[Empty]を選択します。
    スクリーンショット 2020-07-21 10.11.27.png

  • 下図のように、オレンジ色のブロックが作成されたらokです。
    グリーンのEntryからは、必ずオレンジのブロックへ遷移するので、
    オレンジの空のブロックを作ることで、実行時にいきなりanimationが起動することを避けています。
    スクリーンショット 2020-07-21 10.11.43.png

  • Assetsの中にある「cubeanim」を、
    下図のように、Animatorコントローラーへドラッグアンドドロップします。
    スクリーンショット 2020-07-21 10.14.55.png
    スクリーンショット 2020-07-21 10.15.13.png


②イケてるやり方

スクショの都合で、「cubeanim」ではなく、「cube2anim」になっていますが、そこはスルーしてください。

  • 下図は、animationから自動生成された直後
    スクリーンショット 2020-07-21 12.31.24.png

  • 空いている場所で[右クリック]-[Create State]-[Empty]で空のブロックを作る
    スクリーンショット 2020-07-21 12.31.43.png

  • グレーの「New State」のブロックで右クリックして、「Set as Layer Default State」を選択する。
    グリーンの「Entry」の次のブロックは、「New State」にするぜ、という設定です。
    スクリーンショット 2020-07-21 12.32.09.png

  • 下図のようになったらok。
    スクリーンショット 2020-07-21 12.32.19.png


  • つづいて、オレンジのブロックから、電気のスイッチのように、 「オンになったらアニメーションする」ように、パラメーターを作ります。
  • 下図のように、「Animatorコントローラー」の中にある[Parameters]-[+]-[Bool]を選択します。 Bool型はTrueかFalseのみ返すので、今回はBool型を使用します。 よく[Layers]で追加しようとするケースがあるので、注意しましょう。 スクリーンショット 2020-07-21 10.24.49.png
  • 下図のように、適当な名前をつけます。 今回は、 「Bool型である」 「アニメーションは回転(Rotation)である」 「Boolの略としてblとする」 「Rotationの略としてRotとする」 を含めて、「blRot」と命名しました。 決して、「aaaaaaaa」とか「fvum@afwvfujiko」とか、悪い意味での適当はやめましょう。 スクリーンショット 2020-07-21 10.30.16.png
  • 今度は、オレンジの空ブロックから、ちゃんとcubeanimへ遷移するようにします。
    下図のように、オレンジのブロックで[右クリック]-[Make Transition]を選択します。
    矢印が、マウスカーソルを追っかけるので、そのままグレーのcubeanimをクリックします。
    スクリーンショット 2020-07-21 10.33.10.png

  • 下図のように矢印がつながったらok。
    スクリーンショット 2020-07-21 10.35.07.png

  • 同じように、グレーのcubeanimで[右クリック]-[Make Transition]を選択して、
    今度はオレンジのブロックをクリックします。
    下図のようにお互いが矢印でつながったらok。
    スクリーンショット 2020-07-21 10.44.18.png

  • 最後に、オレンジのブロックから、グレーのcubeanimへ、決められた条件で遷移するように設定します。
    下図のように、矢印をクリックして、インスペターウィンドウを表示させておきます。
    スクリーンショット 2020-07-21 10.46.19.png

  • 下図のように、「Conditions」の項目が「List is Empty」となっており、「何も入ってないよ!!」という状態なので、ここにBool型のパラメーターを追加してあげます。
    スクリーンショット 2020-07-21 10.46.19のコピー.png

  • 下図のように、[+]を押すと、現在設定されているパラメーターが追加されます。
    今回はこのままで問題ありません。
    スクリーンショット 2020-07-21 10.46.19のコピー2.png

    スクリーンショット 2020-07-21 10.50.03.png

  • 同様に、グレーのcubeanimから、オレンジのブロックへ戻る矢印も、
    下図のように「Conditions」を設定します。この場合は「blRot」が「false」のときに遷移するようにします。
    スクリーンショット 2020-07-21 11.14.31.png

3. スクリプトの作成

  • オブジェクトcube内にスクリプトを作ります。
    作り方(スクリプトのアタッチの仕方)は割愛します。
    スクリプト名は適当につけてください。今回の例では「cubemove」としています。

  • 下記スクリプト例のように、必要なのはたったの3行です。
    (あとはどのタイミングでanimationを動かすかなので、if文の分だけステップ数が増えます)

public class cubemove : MonoBehaviour
{
    //===== 定義領域 =====
    private Animator anim;  //Animatorをanimという変数で定義する

    //===== 初期処理 =====
    void Start()
    {
        //変数animに、Animatorコンポーネントを設定する
        anim = gameObject.GetComponent<Animator>();
    }

    //===== 主処理 =====
    void Update()
    {
        //もし、スペースキーが押されたらなら
        if (Input.GetKey(KeyCode.Space))
        {
            //Bool型のパラメーターであるblRotをTrueにする
            anim.SetBool("blRot", true);
        }
    }

4.動作確認

  • 実行すると、Spaceキー押下時に、 下図アニメーションgifのように、cubeが「一回だけ回転」します。 (gifアニメだからループしているので注意)

cubeanim動作確認.gif

11
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11