【基本機能】パーティクルシステム

ゲームにエフェクトを追加するために利用する機能です。

Unityのパーティクルシステムはゲームに炎や爆発などのエフェクトを再生する機能を提供します。
設定が大量にあり、それが相互作用したりもするため、慣れるのには時間がかかると思います。

どのような構成でできているか、とりあえず再生できるようになるための手順を紹介します。

対象:初級者、ゲーム必須機能の学習者
使用バージョン:Unity 2021.3
時間:30分

■構成

パーティクルシステムは「どんな粒子を、どのような形で、どのように放出し、どのように変化するか」を指定することで表現します。
それ以外にも設定はありますが、最初はこの4要素を理解してから先へ進むのが良いかと思います。

大量に存在する設定は「モジュール」としてある程度整理されています。

●粒子

粒子が集まってエフェクトを表現します。
形状、色、大きさ、速度、生存期間、などを設定します。

  • メインモジュール
  • テクスチャーアニメーション
  • レンダラーモジュール

●放出口

粒子を放出する穴の形です。
球、円錐、箱といった形状そのものや、粒子生成の範囲を設定します。

  • 形状モジュール

●放出方法

粒子をどのように放出するかです。
一定間隔で放出したり、一度に大量に放出したり、いくつ出すかなどを設定します。

  • 放出モジュール

●変化

条件に応じて粒子がどのように変化するかです。
時間に応じて「色や透明度、サイズ」をどのように変化させるかを指定します。

  • 生存期間の色モジュール
  • 生存期間のサイズモジュール

■使い方

●とりあえずエフェクト再生

ゲームオブジェクトとして作成するだけで上昇する白い粒子が再生されます。

  • ヒエラルキー左上の「+」をクリックし、「エフェクト>パーティクルシステム」をクリック

●設定をいじる

コンポーネントには縦にモジュールが並んでおり、それぞれ展開して設定していきます。

ゲームオブジェクトと同じ名前が付いている1つ目は「メインモジュール」と呼ばれ、
パーティクルシステム全体を制御したり初期化したりする設定があります。

  • 「メイン、レンダラー、テクスチャーアニメーション」で粒子を設定
  • 「形状」で放出口、「放出」で放出方法を設定
  • 「生存期間の色、生存期間のサイズ」で変化を設定

●スクリプトでエフェクト再生

スクリプトを活用することで、再生するタイミングを制御できます。

  1. ゲームオブジェクト取得
  2. パーティクルシステム取得
  3. パーティクルシステムのPlay関数を呼び出す

■実践

●炎っぽいエフェクトの設定

▷パーティクルシステム作成

パーティクルシステムを作成し、(0, 0, 0)に配置、スケールを(5, 5, 5)とします。

【パーティクルシステム作成】パーティクルシステムを作成し、(0, 0, 0)に配置、スケールを(5, 5, 5)とする
【パーティクルシステム作成】パーティクルシステムを作成し、(0, 0, 0)に配置、スケールを(5, 5, 5)とする
  1. ヒエラルキー左上の「+」をクリックし、「エフェクト>パーティクルシステム」をクリック
  2. インスペクターの「Transform>縦の三点リーダー>リセット」をクリック
  3. インスペクターの「Transform>スケール」を(5, 5, 5)とする
  4. CTRLキーを押しながらSキーを押す

▷粒子設定

1秒で消えるようにし、速度0、色オレンジ、重力-2で上昇する粒子とします。

【粒子設定】1秒で消えるようにし、速度0、色オレンジ、重力-2で上昇する粒子とする
【粒子設定】1秒で消えるようにし、速度0、色オレンジ、重力-2で上昇する粒子とする
  1. インスペクターの「Particle System>メイン>継続時間」を(1)とする
  2. インスペクターの「Particle System>メイン>開始時の生存時間」を(1)とする
  3. インスペクターの「Particle System>メイン>開始時の速度」を(0)とする
  4. インスペクターの「Particle System>メイン>開始時の色」を(#FF8000)とする
  5. インスペクターの「Particle System>メイン>重力モディファイア」を(-2)とする
  6. CTRLキーを押しながらSキーを押す

▷放出口設定

秒間20個放出する半径0.1のスフィアを放出口とします。

【放出口設定】秒間20個放出する半径0.1のスフィアを放出口とする
【放出口設定】秒間20個放出する半径0.1のスフィアを放出口とする
  1. インスペクターの「Particle System>放出」のタイトルバーをクリック
  2. インスペクターの「Particle System>放出>時間ごとの率」を(20)とする
  3. インスペクターの「Particle System>形状」のタイトルバーをクリック
  4. インスペクターの「Particle System>形状>形状」を(スフィア)とする
  5. インスペクターの「Particle System>形状>半径」を(0.1)とする
  6. CTRLキーを押しながらSキーを押す

▷色変化設定

時間に応じて色を「不透明から透明、オレンジから茶色」に設定します。

  1. インスペクターの「Particle System>生存期間の色」のタイトルバーをクリック
  2. インスペクターの「Particle System>生存期間の色」にチェックを入れる
  3. インスペクターの「Particle System>生存期間の色>色>カラーバー」をクリック
  4. Gradient Editorの右上マーカーをクリックし、「アルファ」を(0)とする
  5. Gradient Editorの左下マーカーをクリックして「色>カラーバー」をクリック、色の16進数を(FF8000)とする
  6. Gradient Editorの右下マーカーをクリックして「色>カラーバー」をクリック、色の16進数を(800000)とする
  7. CTRLキーを押しながらSキーを押す
【色変化設定】時間に応じて色を「不透明から透明、オレンジから茶色」に設定する
【色変化設定】時間に応じて色を「不透明から透明、オレンジから茶色」に設定する

▷変化設定

時間に応じて変化するサイズを「放物線を描いて落下する形」に設定します。

【変化設定】時間に応じて変化するサイズを「放物線を描いて落下する形」に設定する
【変化設定】時間に応じて変化するサイズを「放物線を描いて落下する形」に設定する
  1. インスペクターの「Particle System>生存期間のサイズ」のタイトルバーをクリック
  2. インスペクターの「Particle System>生存期間のサイズ」にチェックを入れる
  3. インスペクターの「Particle System>生存期間のサイズ>サイズ>グラフバー」をクリック
  4. インスペクター下の「パーティクルシステムカーブ」が見える範囲まで上側にドラッグ
  5. パーティクルシステムカーブの左下にある歯車をクリック
  6. パーティクルシステムカーブの「左上から右下へ落下する放物線」のグラフをクリック
  7. CTRLキーを押しながらSキーを押す

▷エフェクト再生確認

シーンビューとゲームビューでエフェクト再生を確認します。

【エフェクト再生確認】シーンビューとゲームビューでエフェクト再生を確認する
【エフェクト再生確認】シーンビューとゲームビューでエフェクト再生を確認する
  1. エディタ上中央の「▶」をクリック
  2. 炎っぽいエフェクトが再生されることを確認
  3. エディタ上中央の「▶」をクリック

●スクリプトでエフェクト再生

▷開始時に再生しない

ゲーム開始時にエフェクトを再生しないように設定します。

  1. ヒエラルキーの「Particle System」をクリック
  2. インスペクターの「Particle System>メイン>ゲーム開始時に再生」のチェックを外す
  3. CTRLキーを押しながらSキーを押す
【開始時に再生しない】ゲーム開始時にエフェクトを再生しないように設定する
【開始時に再生しない】ゲーム開始時にエフェクトを再生しないように設定する

▷スクリプトからの再生

クリックした時にエフェクトを再生します。

【スクリプトからの再生】クリックした時にエフェクトを再生する
【スクリプトからの再生】クリックした時にエフェクトを再生する
  1. プロジェクトの「Assets」を右クリックし、「作成>C# スクリプト」をクリック
  2. 「Effect」と入力し、ENTERキーを押す
  3. プロジェクトの「Assets>Effect」をヒエラルキーの「Particle System」にドラッグ&ドロップ
  4. CTRLキーを押しながらSキーを押す

▷スクリプト記述

プロジェクトの「Assets>Effect」をダブルクリックし、スクリプトを以下のように記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Effect : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GetComponent<ParticleSystem>().Play();
        }
    }
}

▷スクリプトからの再生確認

クリックした時にエフェクトが再生されることを確認します。

  1. エディタ上中央の「▶」をクリック
  2. エフェクトが再生されないことを確認
  3. ゲーム画面をクリック
  4. エフェクトが再生されることを確認
【スクリプトからの再生確認】クリックした時にエフェクトが再生されることを確認する
【スクリプトからの再生確認】クリックした時にエフェクトが再生されることを確認する

コメント

タイトルとURLをコピーしました