スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:--:-- : スポンサー広告 ]

【Unity】 Unity4.3のMecanimのアニメーションイベントの使い方

Mecanimのアニメーションイベントの使い方。

Unity4.3から、Mecanimに待望のアニメーションイベント機能が追加された。
この機能は簡単に言うと、モーションの特定のタイミングにトリガーを付けられる。

「このタイミングでエフェクトを出したい!」
「足が地面につくタイミングでSEを鳴らしたい!」


といったよくやることは大体これで片付けられる、便利機能だ。

大体のゲームエンジンにはこの機能が付いている。


説明の多さの割にやることは大して多くないので、ちょっとはしょりながら
基本の使い方を説明する。

今回は公式のフリーのアセット、Mecanim Example Sceneを使った。

Mecanim自体についての話は書くのがめんどくさいので省く。


このアセットのFollow Exampleシーンを開く。

「U_Character_REF」オブジェクトのキャラクターのIdle時のモーションにイベントをつけようと思う。




Idleステートの中に「IdleShort」というモーションがセットされているので、
モーション名の所をダブルクリックすると、そのモーションが含まれているClipがプロジェクトツリーに
表示されるはずだ。




そのClipを選択し、Animationsタブを選んでさらにClipsの所でIdleShortを選択。




最下部を見ると、Eventsと書かれたグループがある。
これがアニメーションイベントを設定する箇所だ。




イベントはモーションを再生してプレビューしながら設定する事が出来る。
設定したいタイミングで停止しておき、左の+ボタンを押すといいだろう。




+ボタンを押すと別ウィンドウで追加するイベントの内容が表示される。



上はもう入力済みのものだが、イベントはファンクションなのでファンクション名を登録する。
それ以下の項目はそのメソッドに渡される引数だ。

引数は試してみたがこれらのうち1つまでしか使用出来ないようだ。

Objectに関しては正直良く分からないけどこれも引数なのだろうか?


試しにHogeというメソッド名でstringにhogehogeを入れ、Applyを押すとイベントの登録完了だ。

後は先ほどの「U_Character_REF」オブジェクトにこのイベントのレシーバーを用意する。
レシーバーと言ってもただのスクリプトだ。

今回はこのオブジェクトに元から付いているFollow_UIスクリプトにそれを書く。

    // add function of animation event
public void Hoge( string str )
{
Debug.Log( str );
}
}

これでレシーバーの設定は完了。


おそらくこのゲームオブジェクトにアタッチされている全スクリプトに対して、
イベントで設定したHogeメソッドをBroadCastで呼び出しに行ってるっぽいので
Hogeメソッドを書く場所は融通が利く。

後はシーンを再生すると、設定したタイミングでコンソールにhogehogeと出るはずだ。



以上が、イベントシステムの基本である。

これを使いこなせるようになると、よりキャラクターのアクション作成等が効率的に行えるだろう。


ただ、今問題点が1つある。

レシーバーが存在しないと必ずエラーとしてログに吐いてくれるので、
同じClipを使用している別キャラがいたとして、そのキャラはイベントで何もさせないとしても、
それでもメソッドは書いておかないといけないという点だ。

これの対策としては、Clip毎専用のレシーバークラスを基底として作成して、
それをオーバーライドしたものをキャラにアタッチするようにすれば良いのかも...

イベントを必要としないキャラも必ず基底のレシーバーをアタッチしておく必要があるが... 面倒である。

[ 2013年11月17日 17:28:14 : Unity ]

カレンダー

プルダウン 降順 昇順 年別

11月 | 2018年12月 | 01月
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。