サンプルシーン
スライド
https://speakerdeck.com/yandod/detonatordebao-fa-shimokita-dot-unity
Detonatorの概要
Detonatorは無料で利用できる爆発エフェクトのフレームワークです。アセットに含まれるスクリプトなどを使うことで手軽にリッチな爆発エフェクトを利用できます。
またパラメーターを調整する事でかなり細かいカスタマイズを行うことができます。
おおまかには下記の機能を含んでいます。
- 爆発の煙や光、衝撃波といったエフェクトを表示させる
- 爆発の衝撃を物理エンジンを通じて他のオブジェクトに伝える
- 爆発の音を再生する
- 設定や爆発そのものにスクリプトからアクセス可能
画像や音声なども基本的なものは付属しています。素材を入れ替えればよりオリジナリティの高い爆発を実装できます。
インストール
アセットストアからインストール可能。アカウントが無い場合は作成しておく。
Window > Asset Store
でアセットストアを開き、Detonatorで検索し、Importをクリック。
インポートが完了するとプロジェクトビューにフォルダが作成され、プレハブやスクリプトなどの素材が配置されています。
フォルダ | 内容 |
---|---|
Prefab Examples | ステージに配置するとすぐ動作するプレハブ |
Resources | 煙などのテクスチャ |
Sample Supporting Emitter | 爆発をエミッタで拡張した例 |
Sounds | 爆発音 |
System | スクリプト本体 |
TestScene | 爆発をテストする為のシーン |
とりあえずテストシーンで遊んでもいいが、デモ以上の意味合いは無いので今回は割愛する。
プレハブで爆発テスト
プレハブとして提供されたオブジェクトはシーンに配置すると即座に爆発する。
またインスペクタから設定の調整も可能。
Detonator-Base
を基本として、さまざまなコンポーネントと設定を組み合わせている。プレハブの設定を変更したプレハブを作ったり、プレハブから自分用プレハブを作ってシーンに配置して利用できる。
スタート同時に爆発するのを止めるにはExplode on start
を外す。
これだとまったく爆発しないので発火させるスクリプトを作成して設定。
Add Compnent > New Script
として下記のスクリプトを設定
#pragma strict
function Update () {
if(Input.GetKeyDown(KeyCode.Space)){
this.SendMessage('Explode');
}
}
これでスペースで爆発だ。
シンプルな爆発
プレハブを使った爆発以外にも、既存のオブジェクトに爆発を追加することもできる。(おそらくこちらのやり方が本流)
爆発を追加したいゲームオブジェクトのインスペクタからAdd Component > Detonator
を選択し任意のコンポーネントを追加する。
これによりコンポーネントを設定したオブジェクトが 問答無用で 爆発する。
Detonatorコンポーネントの各設定項目はつぎのとおり。
項目 | 意味 |
---|---|
Script | DetonatorはCSスクリプトになっている |
Size | 爆発のサイズ、単位はメートル |
Color | 爆風の色 |
Explode On Start | 自動的に爆発 |
Duration | 爆発の継続時間(秒) |
Detail | 爆発の中心部分の半径 |
Upwards Bias | 上方へのバイアス |
Destroy Time | 爆発したオブジェクトが消えるまでの秒数(0で消えない) |
Use World Space | 爆発エフェクトにワールド座標を使う |
Auto Create Fireball | 火球を自動生成 |
Auto Create Sparks | 火花を自動生成 |
Auto Create Shockwave | 衝撃波を自動生成 |
Auto Create Smoke | 煙を自動生成 |
Auto Create Glow | 光を自動生成 |
Auto Create Light | 明かりを自動生成 |
Auto Create Force | 力を自動生成 |
Auto Create Heatwave | 熱波を自動生成 |
Auto Create Fireballなどの設定項目はそれぞれのコンポーネントを追加してもよいが、Detonatorから自動生成もできる。細かいカスタマイズは個別のコンポーネントを使う。マテリアルなども差し替えができる。
スクリプトから爆発
爆発を制御するにはプレハブを使った時と同様にExplode On Start
を外し、スクリプトからExplodeをコールする。手軽に実行するならばSendMessage
が便利。SendMessageは該当のゲームオブジェクトの全てのコンポーネントに指定したメソッドを実行しようとする。
非常に便利だが戻り値を受け取れないので呼び出すだけでよい時に用途は限られる。
#pragma strict
function Update () {
if(Input.GetKeyDown(KeyCode.Space)){
this.SendMessage('Explode');
}
}
別のコンポーネントを取り出して操作するにはGameObjectのGetComponetメソッドを使う。
using UnityEngine;
using System.Collections;
public class Exp3Script : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
this.gameObject.GetComponent<Detonator>().Explode();
}
}
}
同じやり方でJavaScriptのスクリプトはそのままでは動かない。これはDetonatorがCsharpで書かれており、クラスを読み込めないから。
ただし、言語が異なっていてもStandard Assets
とPlugin
のスクリプトは事前にコンパイルされるので読み込める。Detonatorはこのどちらにも入っていない。
実行時にはメソッドがあるはず!ということで呼び出すのならばstrictチェックを外して対処する。
function Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
this.gameObject.GetComponent('Detonator').Explode();
}
}
周りのものを吹き飛ばす
Rigidbodyが付いているオブジェクトは爆発のforceの影響を受ける。樽や車にRigidbodyを付けていく。また重さを設定したりMaterialを設定して納得感のある動きにする。
- 樽のコライダーにWood Phsycis Materialを設定
- 車にRigidbodyを設定し、Massを5に
音がでる爆発
Detonator Soundをアタッチすれば音が鳴る。
Near SoundsとFar SoundsのSizeを2に設定し、効果音を設定すると距離に応じてランダムに再生される。
しかしエラーになる。DetonatorSound.csのバグらしい。下記のコードをoverride public void Init()
の前に入れる。
ここをダブルクリック
void Awake()
{
Init();
}
これでエラーも消えて音がなる!
ライブラリを修正しない方法を思いついた
下記のスクリプトを作成し、DetonatorSoundの変わりに使えばバグフリーで同じ使い勝手になる。
using UnityEngine;
using System.Collections;
public class DetonatorSoundP : DetonatorSound {
// need to call Init from Awake to use this component without Explode On Start setting.
void Awake()
{
Init();
}
}
破片が飛ぶ爆発
Object Spraysを使うと破片をばらまくことができる。Add Component > Detonator > Object Sprays
で設定。
Spray Object
に破片としてバラマキたいGameObjectを設定する。あとはパラメータを調整すれば様々な破片を散布できる。
次のようなスクリプトにすれば破片をまき散らす際に元のオブジェクトを非表示に切り替える。
#pragma strict
function Update () {
if(Input.GetKeyDown(KeyCode.Space) && renderer.enabled){
this.SendMessage('Explode');
renderer.enabled = false;
}
}
まとめ
Detonatorはとても強力なアセット。C#で作られている点とSoundの際のバグにだけ気をつけておけばとても便利に使えるので爆発させまくりましょう。
参考資料