アクションゲームを作っている時に、爆発するオブジェクトを作る事がよくあります。
Unityではリアルな爆発を簡単に実装する事ができるので、一度やってみてください。
今回の方法は「Particle System」を使います。
もくじ
はじめに
まず「Particle System」をインポートします。
Assets > Import Package > ParticleSystemを開いて、表示されたウィンドウからImportしましょう。
表示されるファイルをすべてImportしてしまってOK。
ImportするとAssets内にStandard Assetsというフォルダが追加されています。
Standard Assets > ParticleSystem > Prefabsというフォルダに「爆発」や「発火」のプレハブがあるので、これを任意のタイミングで生成するという流れになっています。
では詳しい方法を見ていきましょう。
発火を実装する
まず先ほど導入したパーティクルシステムにある「火」をゲーム内に追加しましょう。
以下のような炎が現れると思います。
FireComplex
こちらは「FireComplex」というプレハブをシーン内に設置しただけです。
もともと完成しているプレハブなので、できれば設定を変えないほうが良いです。
「火」のプレハブと一言で言いましたが、同じ「火」だけでも幾つか種類がありますので、紹介していきます。
FireMobile
先ほどの「FireComplex」に似ていますが、少し小さな火になっています。
FireWorks
名前の通り「花火」を出現させます。
Flare
線香花火のような動作をします。
FlareMobile
「Flare」の小さいバージョンです。
WildFire
動いた軌道を火が追いかけるようになります。
※このParticleはオブジェクトを動かさないと火がつかないので注意してください。
この他にも「煙」や「光」のオブジェクトなどがあります。
続いて「爆発」させる方法の説明に入ります。
爆発するオブジェクトを生成する
「Explosion」というプレハブを追加すれば、爆発するオブジェクトを作れるのですが、それだけだと「ゲーム実行時に爆発」してしまいます。
そこで任意のタイミングで爆発させるために、コードを書いてみましょう。
以下のようなコードを作成してください。
using UnityEngine;
using System.Collections;
public class Expload : MonoBehaviour {
public GameObject ExploadObj;
public GameObject ExploadPos;
// Update is called once per frame
void Update () {
//スペースキーを押したら
if (Input.GetButtonDown ("Jump")) {
Instantiate (ExploadObj, ExploadPos.transform.position, Quaternion.identity);
}
}
}
ExploadObjに生成したいプレハブ(爆発のプレハブ)を割り当てましょう。
ExploadPosはプレハブを生成する座標を指定しています。
今回は以下の画像のようにGameObjectを設置してあります。
赤い部分に爆発を起こします。
では実際の動作を確認してみてください。
スクリーンショットを撮ったらこのようになりました。
さらに、先ほど紹介した「発火」と今の「爆発」を組み合わせると以下のようなものになります。
発火と爆発を組み合わせる
ここで使っているのは「WildFire」と「Explosion」です。
HPが0になったら「火」を出しながら墜落し、
一定時間後に爆発します。
その後余韻を持った後、
火が消えてからシーンを再読み込みしています。
先ほどのコードと同じようにすれば実装できるのですが、ExploadPosは「プレイヤーの座標」に変更してください。
また、爆発するオブジェクトを生成しているだけなので「爆発と同時に、プレイヤーの画像とコライダーを非表示」にしています。
さらに、この「Explosion」は爆発して消えたように見えても、実際はシーン内に残っています。
再ロードすれば消えますが、爆発後もそのままゲームを続ける場合は注意してください。
その場合はDestroy(GameObject)で削除しておくと、ゲームが重くなる心配も無くなります。
今回の動作がわかりやすくなるように、動画を撮影しました。
まとめ
今回の方法は「爆発する位置」を指定するだけでなく、プレハブを生成するときにも使えるコードなので是非覚えてください。
こちらの記事でも「Instantiate」を使っています。
もしよければ立ち寄ってみてください。
ではまた。