ファイブボックス一分間Unity講座アイキャッチ画像
ファイブボックス一分間Unity講座アイキャッチ画像

1分間 Unity講座 ミサイルを当てた場所にParticleSystemで作った爆発エフェクトを生成する方法 - ファイブボックス

1分間 Unity講座 ミサイルを当てた場所にParticleSystemで作った爆発エフェクトを生成する方法

このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。

一分間Unity講座のまとめはこちらから。

前回の記事「発射したミサイルに当たったオブジェクトを削除する方法」までで、クリックした場所に向けて弾を飛ばし、オブジェクトに当たったら弾とそのオブジェクトを削除する動きができました。

【プレハブ生成シリーズ】

ランダムな座標へ複数のプレハブを生成する方法
スペースキーでクローンで作られたミサイルを発射する方法
マウスクリックした座標に向けてミサイルを発射する方法
発射したミサイルに当たったオブジェクトを削除する方法

今回は削除するタイミングで、ParticleSystemで作成した爆発エフェクトのプレハブを生成する方法についてご説明します。

下の動画は「ファイブボックス 一分間Unity講座 ミサイルを当てた相手を消す方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください。

爆発エフェクトの作成

Hierarchy上で右クリック、または+ボタンから「Effects」⇒「Particle System」を選択し、ParticleSystemを作成します。

ParticleSystemの配置

今回は爆発演出を作りたいので、各モジュール、パラメータを次のように指定していきます。

※一分間の説明をベースとしていますので、なるべく少ない変更箇所で作っています。

メインモジュール

おもに新たに生成されるParticleの初期状態を管理するモジュールです

❶ Start LifeTime:1.5 粒子1つ1つの生存時間

❷ Start Speed:1 粒子の初速度

❸ Start Size:3 粒子の最初の大きさ

❹ Start Color:任意の色を指定、サンプルではオレンジ刑にしています

メインモジュールの指定

Emissionモジュール 放出レートとタイミングを管理するモジュールです

❺ Rate Over Time:0 ユニットタイムごとに放出される粒子の数

❻ Bursts:+ボタンで1つ追加 パーティクル生成イベントを追加

  Count:100 放出される粒子数を指定

ParticleSystem Emissionモジュールの設定

Shapeモジュール

パーティクルを放出する体積、面、および開始速度の方向を定義するモジュールです

❼Shape:Sphere(球体)放出するボリュームの形状

Particle System Shapeモジュールの指定

Velocity over Lifetime モジュール

Particleの生存期間中の速度を制御するモジュールです

❽ Radial:3 中心から離れる粒子の半径

ParticleSystemのVelocityoverTimeモジュール設定

Size over Lifetime モジュール

Particleの生存期間中の大きさの変化を制御するモジュールです

❾ Size:curveを選択、エディターから右下がりのカーブを指定

  徐々に小さくなる

SizeoverLifeTimeモジュールの設定

他にも多くのモジュールがありますが、お好みに合わせて調整してみてください。

全体的に大きいようなので、TransformコンポーネントでScaleをx,y,z とも0.3程度にしておきます。

最後は、作成したParticle SystemをAssetsフォルダにドラッグ&ドロップでプレハブ化します。プレハブの名前は「ExplosionPrefab」にしておきます。

作成したParticleをプレハブ化

作成済みのスクリプトファイル

スクリプトファイルは以下にまとめました。

PrefabManager.cs

[SerializeField] GameObject cubePrefab; //cubeのプレハブ
[SerializeField] GameObject bulletPrefab, battery;
float timer;                            //経過時間を管理する変数
Camera cam;             //メインカメラ

void Start()
{
    cam = Camera.main;      //メインカメラを取得し代入
}

void Update()
{
    //マウスが左クリックされたときクリックされた場所に弾を飛ばす処理
    if(Input.GetMouseButtonDown(0))
    {
        //マウスの座標を取得
        var mousePos=Input.mousePosition;
        //カメラからの奥行きを10に設定
        mousePos.z = 10.0f;
        // スクリーン座標をワールド座標に変換
        var targetPos = cam.ScreenToWorldPoint(mousePos);
        // 弾を生成
        GameObject bullet =
            Instantiate(bulletPrefab, battery.transform.position, 
uaternion.identity);
        // クリックした位置へのベクトルを取得し標準化
        var dir = (targetPos - battery.transform.position).normalized;
        // Rigidbodyに力を加える(クリックした座標に2000の力で飛ばす)
        bullet.GetComponent<Rigidbody>().AddForce(dir * 2000);
        //弾を3秒後に削除
        Destroy(bullet, 3.0f);
    }

    //Cube を生成する処理
    timer += Time.deltaTime;        //timerに経過時間を加算
    if (timer > 1.0f)               //timerが1秒を超えたら
    {
         //Vector3型の変数:pos を宣言、半径5の球体内のランダムな場所を指定
         Vector3 pos = Random.insideUnitSphere * 5.0f;
         //cubePrefabをposの座標に、回転無しで生成
         Instantiate(cubePrefab, pos, Quaternion.identity);
         timer = 0;                  //timerを0リセット
    }
}

BulletManager.cs

void OnCollisionEnter(Collision collision)  //衝突検知のイベント関数
{
    //衝突したオブジェクトがCubeタグを持っていたら
    if (collision.gameObject.CompareTag("Cube"))    
    {
        Destroy(collision.gameObject);  //衝突したオブジェクトを削除
        Destroy(gameObject);            //自分自身を削除
    }
}

弾が当たった場所に爆発のエフェクトプレハブを生成

今回は作成済みの「BulletManager.cs」を編集します。

追記するのは下のスクリプトファイルの青地の部分です。

BulletManager.cs

BulletManagerは、作成済みのBulletのプレハブにアタッチされています。

BulletのプレハブのBulletManagerに表示された変数:ExplosionPrefab に、ExplosionPrefab をAssignします。

BulletにParticlePrefabをAssign

これで動画のように、当たったタイミングで爆発のエフェクトが表示されるようになっていると思います。


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP