Amazonで商品を見るセール会場へ

Unity│パーティクルに関するエフェクト小技集まとめ│Shuriken

パーティクルシステム(Shuriken)に関する小技をまとめました。知っておくと便利なTIPSを紹介します。

目次

uGUI(Screen Space – Overlay)の前にパーティクルを表示する方法

Screen Space – Overlayの場合はUIが必ず最前面に来るため、通常はパーティクルを前に表示できません。

しかしRender Textureを使えば実現できます。

uGUIの前にパーティクルを表示

テキストとボタンの間にパーティクル(レンダーテクスチャ)を入れています。

手順

  1. GameObject → UI → Buttonを作成
  2. 子にGameObject → UI → RawImageを作成
  3. Assets → Create → Render Texture(Particle Render Texture)を作成し、RawImageにアサイン
RawImageの設定
  1. パーティクル用のカメラ(ParticleCamera)を作成
  2. Layerに「particle」を作成し、カメラのCulling Maskをparticleに設定
  3. Clear FlagsをSolid Color、アルファを0に設定
  4. Target TextureにParticle Render Textureを設定
カメラの設定
  1. ParticleCameraの子にParticle Systemを作成
  2. Particle Systemのレイヤーをparticleに設定
  3. Textを作成して、Button、RawImage、Textの階層順に配置
  4. 再生して、ボタンとテキストの間にパーティクルが表示されることを確認
階層構造

Max Particle Sizeについて

魔法陣など大きいサイズのパーティクルを出したとき、カメラをズームしてもサイズが変わらないことがあります。その場合はMax Particle Size(デフォルト0.5)の値を大きくします。

検証結果

Max Particle Sizeのテスト1

Particle Start Size 100 = Plane Scale 10 という結果になりました。

Max Particle Sizeのテスト2

カメラのズーム範囲を先に決めて、パーティクルサイズに合わせてMax Particle Sizeを調整しましょう。カメラがSize 15までズームする場合、Particle Start Size 25以上のものはMax Particle Sizeの調整が必要になる可能性があります。

パーティクルでテキストを発生させる方法

パーティクルでテキストを発生

Render Textureを使います。テキストが変更されるとパーティクルのテキストも更新されます。

テキストの更新

マテリアルの準備

  1. Assets → Create → Render Texture(Text Render)を作成
  2. Assets → Create → Material(Text Material)を作成
  3. Text MaterialのShaderをMobile → Particle → Additiveに変更
  4. Text MaterialのTextureにText Renderをアサイン

シーンの作成

  1. Main CameraのClear FlagsをSolid Color(黒)に設定
  2. Main CameraをCtrl+Dで複製してText Cameraを作成
  3. Text CameraのProjectionをOrthographicに変更
  4. Text CameraのTarget TextureにText Renderを設定
  5. CanvasをScreen Space – Cameraに変更し、Render CameraをText Cameraに設定
  6. GameObject → UI → Textで文字を入力
  7. GameObject → Particle Systemを作成
  8. Particle SystemのRenderer → MaterialにText Materialを設定

カウントダウン用のスクリプト:

using UnityEngine;
using UnityEngine.UI;
public class TimeScript : MonoBehaviour
{
private float time = 10;
void Start()
{
    GetComponent<Text>().text = ((int)time).ToString();
}

void Update()
{
    time -= Time.deltaTime;
    if (time < 0) time = 0;
    GetComponent<Text>().text = ((int)time).ToString();
}
}

パーティクルの描画が残り続ける場合の解消方法

パーティクルの描画が毎フレーム残り続けてしまう場合、カメラの設定が原因です。

Clear Flagsの設定

Camera → Clear Flagsが「Don’t Clear」になっていると、パーティクルの各フレームの描画が次のフレーム上に残ってしまいます。背景を黒くしたい場合は「Solid Color」を使用してください。

パーティクルをパスに沿わせる方法

パスに沿ったパーティクル

参考:https://www.youtube.com/watch?v=lIbY95qBPxc

手順

  1. 動画のダウンロード先から3つのスクリプトを入手(Math_Functions.cs、ParticlePathFlow.cs、Path_Comp.cs)
  2. Particle Systemを作成
  3. ParticlePathFlow.csをアタッチ
  4. 空のGameObjectを複数配置(ベジェのポイントになる)
  5. パーティクルのパラメータを調整
パスに沿わせる設定

調整パラメータ:

  • Lifetime:描くスピードに影響
  • Size:太さに影響
  • Color over Lifetime:色に影響
  • Emission Rate:数に影響(大きすぎると1個だけ先に出てしまう)

パーティクル衝突時にヒットエフェクトを出す方法

OnParticleCollisionを使用すると、パーティクル衝突時に別のパーティクルを発生させることができます。

準備

  • 当てる用のパーティクル(Beam)
  • ヒット用のパーティクル(Explosion)
  • 障害物(Cube)

設定

  1. 当てる用のパーティクルのCollisionにチェック
  2. TypeをWorldにして、Send Collision Messagesにチェック
  3. 以下のスクリプトをアタッチ
using UnityEngine;
public class FX_Test : MonoBehaviour
{
private ParticleSystem.CollisionEvent[] collisionEvents = new ParticleSystem.CollisionEvent[16];
private ParticleSystem ps;
void Start()
{
    ps = GetComponent<ParticleSystem>();
}

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        ps.Play();
    }
}

void OnParticleCollision(GameObject other)
{
    GameObject hitParticle = GameObject.Find("Explosion");
    int safeLength = ps.GetSafeCollisionEventSize();
    
    if (collisionEvents.Length < safeLength)
        collisionEvents = new ParticleSystem.CollisionEvent[safeLength];
    
    int numCollisionEvents = ps.GetCollisionEvents(other, collisionEvents);
    
    for (int i = 0; i < numCollisionEvents; i++)
    {
        Vector3 collisionHitLoc = collisionEvents[i].intersection;
        GameObject instance = Instantiate(hitParticle, collisionHitLoc, Quaternion.identity);
        instance.GetComponent<ParticleSystem>().Play();
        Destroy(instance, 1.0f);
    }
}
}

Unityのほかの記事は、まとめからご覧いただけます。

エフェクト制作に必要な要素はこちらにまとめています。

アニメーションに使えるシェーダーはこちらです。

まとめ

  • uGUIの前にパーティクルを表示するにはRender Textureを使う
  • 大きいパーティクルはMax Particle Sizeを調整する
  • パーティクルが残り続ける場合はClear Flagsを確認する
  • パスに沿わせるには専用スクリプトを使用する
  • 衝突エフェクトはOnParticleCollisionで実装できる

ほかの記事はUnityの使い方まとめからご覧いただけます。

Unityの学習に使える本と、あると捗る機材

Unityは公式ドキュメントだけでも進められますが、体系立てて学ぶなら書籍が早いです。開発環境まわりで効いてくる機材も併せてまとめました。

Unityと C# を体系的に学べる本

まず1冊なら「Unityの教科書」。C#の文法でつまずくなら入門書を1冊挟むと楽になります。

¥1,485 (2026/09/15 22:01時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\メルカリで商品を見る/
メルカリ
技術評論社
¥3,080 (2026/09/15 22:01時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\メルカリで商品を見る/
メルカリ
秀和システム
¥2,200 (2026/09/15 22:01時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\メルカリで商品を見る/
メルカリ

開発が捗る機材

コントローラーは実機での入力確認に、WQHDモニターはInspectorとSceneビューを並べるのに効きます。プロジェクトが増えてきたら外付けSSDを。

マイクロソフト
¥8,027 (2026/09/15 22:01時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\メルカリで商品を見る/
メルカリ
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\メルカリで商品を見る/
メルカリ

選び方をもっと詳しく

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次