役に立たないゲーム開発(Unity)の話。animation event編
全て独学でblenderとunityを使って苦しみながらゲーム開発しております。
先日unityでとても便利な機能を知りましたのでその話をば…
ゲーム内で扉の開閉の時にSEを付けようと思ったんですよ。
やり方は色々あるんですが、最初に思いついたのがドアのオブジェクトのスクリプトでパブリックのAudio clipをopen、closeと用意してインスペクタで効果音をアタッチ!
あとはスクリプトでドアの開閉に合わせて再生処理をすればオッケー!
と思ったんですが、
いざやってみると、ドアを閉めるときのバタン!という音がいまいちアニメーションとかみ合ってない!
バタンの後にドアが閉まる感じになってしまいました。
個人が作るゲームなのでそこのクオリティはどうでもいいだろう。と思ったんですが、これではなんか気持ち悪いのでなんとかしてみようとしました。
思いついた策としてまず、
1、アニメーションを早くしてバタンにタイミングを合わせる。
できなくはないですが、ドアの開閉が異常にスピーディーになってしまい、ちょっと変な感じになりそうなので却下。
2、SEの再生を遅らせる。
float型のカウントダウン用の変数を用意して0になったらSEを再生。
うまくアニメーションと合うように値を調整。これもできなくはないですが、ちょっとめんどくさい。そもそもやり方がダサい。却下。
3、アニメーションに直接SEを付ける。
そもそもそんなことできるのかな?ということでググッてみました。
ありました!さすがunity!痒いところに手が届くというか!
Animation eventという機能がありましたのでこれで可能なようです!
この作戦に決定!
まずは新しくスクリプトを用意してこんな感じにします↓
これをアニメーションを持っているドアオブジェクトにアタッチします。
そしてAudioClipにドアの開閉音をドラッグ&ドロップ。
そしたらwindowからanimationを開き、ドアのオブジェクトを選択します。
そしたら
1をクリック。
すると2が表示されます。この2がSEの再生位置となります。
そしたら今度はインスペクタでfunctionを開きます。すると先程スクリプトで書いたメソッドが呼び出されます。
これを開閉アニメーションに合わせてやって、後はSEの再生位置を調整。
はいできた!
説明が雑かもですがすいません。
このAnimation eventは他でもかなりの応用が効きそうですね!
そんなんも知らなかったのか!と思われるかもですが、もしそう思われたら心の中で静かに僕を笑ってやってください。
こんな感じでお勉強しながらやってます。備忘録として今後も発見があり次第記事にしようと思います。