---
title: パーティクルトリガーの設定
product: Unity Editor
version: '6000.0'
latest_version: '7000.0'
status: This page documents version 6000.0. The latest version is 7000.0.
canonical: https://docs.unity.com/ja-jp/engine/6000.0/manual/configure-particle-trigger
latest_url: https://docs.unity.com/ja-jp/engine/7000.0/manual/configure-particle-trigger.md
last_updated: 2026-10-30
generated_at: 2026-11-11T06:00:11.115Z
locale: ja-jp
---

# パーティクルトリガーの設定

> Create and configure a trigger on the particles of a Particle System.

はじめに、パーティクルが相互作用できるシーンのコライダーを指定します。そのためには **Colliders** リストプロパティに 1 つ以上のコライダーを割り当てます。リストのコライダーの数を増やすには、コライダーのリストの下にある追加 (+) ボタンをクリックします。リストからコライダーを削除するには、コライダーを選択して削除 (-) ボタンをクリックします。リストのインデックスにまだコライダーを割り当てていない場合は、空のエントリーの右側にある小さい追加 (+) ボタンを使用し、新しいコライダーを作成して割り当てることができます。この例では、パーティクルシステムの子として新しいゲームオブジェクトを作成し、そこにスフィアコライダーをアタッチしてから、コライダーを空のエントリーに割り当てます。

コライダーを追加したら、パーティクルが特定のトリガーイベントタイプの基準を満たした場合に行う動作を指定できます。パーティクルがコライダーと相互作用する方法は、4 つのイベントタイプで指定します。相違点：

* **Inside**:パーティクルがコライダーの境界の中にある。
* **Outside**:パーティクルがコライダーの境界の外にある。
* **Enter**:パーティクルがコライダーの境界に入る。
* **Exit**:パーティクルがコライダーの境界から出る。

Inspector では、これらのイベントタイプごとにドロップダウンがあり、トリガーイベントの条件を満たす場合にパーティクルに何が起こるかを選択することができます。これで HDRP がモーションベクトルをレンダリングできるようになります。オブジェクトモーションベクトルを有効にする場合は、デフォルトにより、新しいメッシュレンダラーがオブジェクトモーションベクトルを書きますので、注意してください。この動作を変更するには、メッシュレンダラーを選択し、Inspector で **Motion Vectors** プロパティーの値を変更します。

![](Images/MotionVectors1.png)

* **Callback**:OnParticleTrigger() コールバック関数でパーティクルにアクセスできるようになります。
* **Kill**:パーティクルを破棄します。OnParticleTrigger() コールバック関数でパーティクルにアクセスできません。
* **Ignore**:パーティクルを無視します。OnParticleTrigger() コールバック関数でパーティクルにアクセスできません。

## OnParticleTrigger() 内でのパーティクルへのアクセス##accessing-particles-within-onparticletrigger()

トリガーイベントの 1 つに対するリアクションとして **Callback** を選択する場合、アタッチしたスクリプトからイベント条件を満たすパーティクルにアクセスできます。これを行うには、まずアタッチしたスクリプトに `OnParticleTrigger()` 関数を追加する必要があります。この関数内で、[ParticlePhysicsExtensions.GetTriggerParticles()](/engine/6000.0/script-reference/unityengine/particlephysicsextensions/gettriggerparticles.md) 関数を呼び出して、トリガーイベントの条件を満たすパーティクルのリストを取得します。この関数は、パーティクルを取得したいトリガーイベント (**Inside**、**Outside**、**Enter**、**Exit**) を指定する [ParticleSystemTriggerEventType](/engine/6000.0/script-reference/unityengine/particlesystemtriggereventtype.md) と、この関数が結果を表す [Particles](/engine/6000.0/script-reference/unityengine/particlesystem/particle.md) のリストを受け取ります。このリストから、任意のパーティクルにアクセスしたり、変更したり、破棄したりすることができます。また、この関数は任意のパラメーターをとり、各パーティクルがどのコライダーをトリガーしたかなどの衝突情報を出力することができます。**Collider Query Mode** プロパティは、このパラメーターを通して利用できる情報を制御します。

API の詳細や使用方法については、[以下の例](#Example) を参照してください。

## 例##examples

### コライダーとの相互作用##interaction-with-a-collider

以下の例では、パーティクルがコライダーに侵入すると赤くなり、コライダーの境界から出ると緑に変わります。

```lang-cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
	ParticleSystem ps;

	// these lists are used to contain the particles which match
	// the trigger conditions each frame.
	List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
	List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();

	void OnEnable()
	{
    	ps = GetComponent<ParticleSystem>();
	}

	void OnParticleTrigger()
	{
    	// get the particles which matched the trigger conditions this frame
    	int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
    	int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);

    	// iterate through the particles which entered the trigger and make them red
    	for (int i = 0; i < numEnter; i++)
    	{
        	ParticleSystem.Particle p = enter[i];
        	p.startColor = new Color32(255, 0, 0, 255);
        	enter[i] = p;
    	}

    	// iterate through the particles which exited the trigger and make them green
    	for (int i = 0; i < numExit; i++)
    	{
        	ParticleSystem.Particle p = exit[i];
        	p.startColor = new Color32(0, 255, 0, 255);
        	exit[i] = p;
    	}

    	// re-assign the modified particles back into the particle system
    	ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
    	ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
	}
}
```

この例の結果は下の画像の通りです。


**エディタービュー:**
![](/api/media?file=/engine/6000.0/media/images/PartSysTriggersModule-ExampleEditorView.jpg)


**ゲームビュー:**
![](/api/media?file=/engine/6000.0/media/images/PartSysTriggersModule-ExampleGameView.jpg)

### 複数のコライダーとの相互作用##interaction-with-multiple-colliders

以下の例では、`GetTriggerParticles()` 関数から抽出できる追加の衝突データを利用しています。1 つ目のコライダーの境界内にあるパーティクルは赤に、2 つ目のコライダーの境界内にあるパーティクルは青に、そして両方のコライダーの境界内にあるパーティクルは緑になります。また、パーティクルがコライダーの内側にない場合は白色になります。この例では、 **Collider Query Mode** を **All** に設定しています。

```lang-cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
	void OnParticleTrigger()
    {
        ParticleSystem ps = GetComponent();
 
        // particles
        List inside = new List();
        List exit = new List();
 
        // get
        int numInside = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside, out var insideData);
        int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
 
        // iterate
        for (int i = 0; i < numInside; i++)
        {
            ParticleSystem.Particle p = inside[i];
            if (insideData.GetColliderCount(i) == 1)
            {
                if (insideData.GetCollider(i, 0) == ps.trigger.GetCollider(0))
                    p.startColor = new Color32(255, 0, 0, 255);
                else
                    p.startColor = new Color32(0, 0, 255, 255);
            }
            else if (insideData.GetColliderCount(i) == 2)
            {
                p.startColor = new Color32(0, 255, 0, 255);
            }
            inside[i] = p;
        }
        for (int i = 0; i < numExit; i++)
        {
            ParticleSystem.Particle p = exit[i];
            p.startColor = new Color32(1, 1, 1, 255);
            exit[i] = p;
        }
 
        // set
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
    }
}
```

この例の結果は下の画像の通りです。


**ゲームビュー:**
![](/api/media?file=/engine/6000.0/media/images/PartSysTriggersModule-Example2.png)
