かずおの開発ブログ(主にRuby)

日々の開発のことを色々書きます。

[Unity] AnimationEventを用いてAnimationの終了を取得

UnityのAnimationを触っているとAnimationが終わったときに何かしたいみたいなことがよくあると思います。今回はAnimationEventを用いて、Animationの終わりを取得する方法をご紹介します。

完成形

今回サンプルとして作成したのはこちらです。

 

youtu.be

球体が道の上を走るアニメーションが動いており、アニメーションが終了した瞬間に右にあるテキストがAnimationからEndに変わるといったシンプルなサンプルです。

1.プロジェクトを作成

まずはプロジェクトを作成してCanvas配下にText(Textコンポーネント)、Road(Imageコンポーネント)、Circle(Imageコンポーネント)を配置してこんな感じにしてください。

f:id:kazuooooo:20150510201810p:plain

2.アニメーションを作成

続いてAnimationを作成してください。Canvasを選択状態でWindow→Animationでアニメーションウィンドウを起動して録画を使って完成形にあったアニメーションを作成してください。(アニメーションの詳しい作成方法についてはこちらを参照ください

ゲーム開発初心者のためのUnity入門(4):Unityで3Dアニメーションを作成・再生するための基本 (1/3) - @IT)

f:id:kazuooooo:20150510202450p:plain

3. アニメーション終了時に呼び出すメソッドを作成

続いてアニメーション終了時に呼び出すスクリプトを作成します。ここで注意点としてスクリプトをアタッチするオブジェクトは先ほどAnimationを作成したCanvasオブジェクトにしてください。(でないとAnimationEventを呼べません)

f:id:kazuooooo:20150510202801p:plain

TextChange.csの内容はこちらです

gist.github.com

 

4. AnimationEventを追加

下準備が出来たのでここからが本題です。先ほどのCanvasのAnimationウィンドウを再度開きアニメーション終了時のKeyFrame上あたりで右クリックしてください

そうするとAdd AnimationEventという項目が出てくるのでそれを選択します。

f:id:kazuooooo:20150510203451p:plain

すると新しいウィンドウが開いてFunctionが選択出来るようになります。この中から先ほど作成したshowendtextメソッドを選択します。(一覧に表示されない場合はスクリプトがついているゲームオブジェクトとAnimationがついているゲームオブジェクトが同じであるか確認してください。)

f:id:kazuooooo:20150510203648p:plain

ではこれで一度ゲームを再生してみましょう。(Animationではなくゲーム自体の再生です。)

Animationが終了(Circleが一番下にきた)時にテキストにEndと表示されれば成功です。

ただ気づかれたと思いますが一度テキストがEndになるとずっとEndのままです。

そこで動画と同じようにするためには Animationの開始時にもう1つAnimationEventを追加してここでshowAnimationTextを呼んでテキストをAnimationに戻しています。(開始から少しずらしているのは開始直後だと間が短すぎてEndが見えないため)

f:id:kazuooooo:20150510204343p:plain

ここまでやると完成形と同じになるはずです!

お試しあれ!