今日のUnity (7) 爆発エフェクト
今日のUnity (6) 大砲発射(2014/8/10)のつづき。前回のプログラムを実行してみるとわかるけど何か物足りない気が・・・そうだ爆発だ!というわけで今回は爆発エフェクトを追加してみた。前回と操作方法は同じでクリックすると砲弾が発射される。そして壮大に爆発する(笑)
Detonator Explosion Frameworkの導入
今回は、初めてAsset Storeを使ってみた。メニューのWindow > Asset Store
から呼び出せる。爆発エフェクトのフレームワークとしてDetonator Explosion Frameworkというのがあるらしいのでそれを導入した。Detonatorで検索するとすぐに見つかる。Downloadボタンを押すだけでAsettsディレクトリの下にインポートされる。
インポート時にNormalMap settings
というダイアログが出てきた。ここでIgnoreを選択すること!Fix nowすると煙のテクスチャが四角くなってしまった。
爆発エフェクト
さっそく爆発エフェクトを追加してみよう。今回は、砲弾がブロックにぶつかったときに爆発するようにしたい。そのため前回作った砲弾のPrefabに対してコンポーネントを追加していく。
- 砲弾のPrefabを選択する。
Add Component > Detonator > Detonator
で爆発エフェクトを出すスクリプト(Detonator.cs)を追加する。Explode On Start
のチェックを外して爆発のタイミングはスクリプトから制御する。- Detonatorコンポーネントの下のチェックボックスをいじると爆発エフェクトがいろいろ変えられる。
衝突判定と爆発
- 同じく砲弾のPrefabにスクリプトを追加する。
- 自分に対して
Explode
というメッセージを送ると爆発させられる。
ぶつかったオブジェクトがブロックかどうかはname
で調べているけど、Tag機能を使うとより簡単にできそう。Prefabはスクリプトから生成しているのでname
で検索する場合は (Clone) をつける必要がある。ブロックかどうか判定するif文を消すと地面も消し飛んでしまう(笑)
この時点でDestroy(gameObject);
とやって砲弾オブジェクトを削除してはダメ!ここで削除してしまうと付属する爆発エフェクトも表示されなくなってしまう。単に砲弾を見えなくするだけにとどめた。砲弾は見えなくなるけど爆発エフェクトはちゃんと表示される。
爆発音のセット
これで爆発エフェクトは表示されるが爆発音がしないのでまだ物足りない。爆発音を追加しよう。
- 砲弾のPrefabに対して
Add Component > Detonator > Sound
で追加する。 Near Sounds
とFar Sounds
のSize
プロパティを1にする。Element
に好きな爆発音をセットする。
爆発音のサンプル音声は、Soundsフォルダにあった。音声ファイルをクリックするとインスペクタに情報が表示される。3D Sound
にチェックが入っていると音が小さいようなので外した。あとは音声ファイルをドラッグアンドドロップしてElement
にセットすればよい。
実行するとエラーが出る。どうやらDetonatorSound.csにバグがあるらしい。override public void init()
の前に下の関数を追加したら直った。
void Awake() {
Init();
}
Detonator Explosion Frameworkは高機能でまだまだいろいろな機能があるみたい。こんな簡単にかっこいいエフェクトが追加できるのは本当にすごい。
Buildすると爆発エフェクトが表示されない場合
UnityのEditor上だと爆発エフェクトが表示されるのにWeb Player用にビルドすると爆発エフェクトが表示されずにはまった。最終的にDetonatorコンポーネントのMaterialをすべて手動で設定すると直った。右のポチを押すとマテリアルが表示されるので対応するものを選べば良い。
参考
- Unityのアセットストア(AssetStore)を使う方法【初心者向け】 - AssetStoreの基本的な使い方
- UnityのDetonatorで爆発させる - Detonator Explosion Frameworkの詳しい解説記事
- DetonatorをiOSで動かしたとき発生するエラーについての検証 - Buildすると爆発エフェクトが表示されないときの解決方法