人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

今日のUnity (7) 爆発エフェクト

今日のUnity (6) 大砲発射(2014/8/10)のつづき。前回のプログラムを実行してみるとわかるけど何か物足りない気が・・・そうだ爆発だ!というわけで今回は爆発エフェクトを追加してみた。前回と操作方法は同じでクリックすると砲弾が発射される。そして壮大に爆発する(笑)

DetonatorTest

Detonator Explosion Frameworkの導入

今回は、初めてAsset Storeを使ってみた。メニューのWindow > Asset Storeから呼び出せる。爆発エフェクトのフレームワークとしてDetonator Explosion Frameworkというのがあるらしいのでそれを導入した。Detonatorで検索するとすぐに見つかる。Downloadボタンを押すだけでAsettsディレクトリの下にインポートされる。

インポート時にNormalMap settingsというダイアログが出てきた。ここでIgnoreを選択すること!Fix nowすると煙のテクスチャが四角くなってしまった。

f:id:aidiary:20140813195453p:plain

爆発エフェクト

さっそく爆発エフェクトを追加してみよう。今回は、砲弾がブロックにぶつかったときに爆発するようにしたい。そのため前回作った砲弾のPrefabに対してコンポーネントを追加していく。

  • 砲弾のPrefabを選択する。

f:id:aidiary:20140813195502p:plain

  • Add Component > Detonator > Detonatorで爆発エフェクトを出すスクリプト(Detonator.cs)を追加する。
  • Explode On Startのチェックを外して爆発のタイミングはスクリプトから制御する。
  • Detonatorコンポーネントの下のチェックボックスをいじると爆発エフェクトがいろいろ変えられる。

f:id:aidiary:20140813195504p:plain

衝突判定と爆発

  • 同じく砲弾のPrefabにスクリプトを追加する。
  • 自分に対してExplodeというメッセージを送ると爆発させられる。

ぶつかったオブジェクトがブロックかどうかはnameで調べているけど、Tag機能を使うとより簡単にできそう。Prefabはスクリプトから生成しているのでnameで検索する場合は (Clone) をつける必要がある。ブロックかどうか判定するif文を消すと地面も消し飛んでしまう(笑)

この時点でDestroy(gameObject);とやって砲弾オブジェクトを削除してはダメ!ここで削除してしまうと付属する爆発エフェクトも表示されなくなってしまう。単に砲弾を見えなくするだけにとどめた。砲弾は見えなくなるけど爆発エフェクトはちゃんと表示される。

爆発音のセット

これで爆発エフェクトは表示されるが爆発音がしないのでまだ物足りない。爆発音を追加しよう。

  • 砲弾のPrefabに対してAdd Component > Detonator > Soundで追加する。
  • Near SoundsFar SoundsSizeプロパティを1にする。
  • Elementに好きな爆発音をセットする。

爆発音のサンプル音声は、Soundsフォルダにあった。音声ファイルをクリックするとインスペクタに情報が表示される。3D Soundにチェックが入っていると音が小さいようなので外した。あとは音声ファイルをドラッグアンドドロップしてElementにセットすればよい。

f:id:aidiary:20140813195455p:plain

実行するとエラーが出る。どうやらDetonatorSound.csにバグがあるらしい。override public void init()の前に下の関数を追加したら直った。

void Awake() {
  Init();
}

Detonator Explosion Frameworkは高機能でまだまだいろいろな機能があるみたい。こんな簡単にかっこいいエフェクトが追加できるのは本当にすごい。

Buildすると爆発エフェクトが表示されない場合

UnityのEditor上だと爆発エフェクトが表示されるのにWeb Player用にビルドすると爆発エフェクトが表示されずにはまった。最終的にDetonatorコンポーネントのMaterialをすべて手動で設定すると直った。右のポチを押すとマテリアルが表示されるので対応するものを選べば良い。

f:id:aidiary:20140813195507p:plain

参考