Version: 2018.2
충돌 모듈
서브 이미터 모듈

트리거 모듈

파티클 시스템은 씬에서 한 개 이상의 콜라이더와 상호작용할 때마다 콜백을 트리거할 수 있습니다. 파티클이 콜라이더에 들어가거나 빠져 나올 때, 또는 콜라이더의 내부나 외부에 있는 동안 콜백이 트리거될 수 있습니다.

파티클이 콜라이더에 들어갈 때 파티클을 파괴하는 간단한 방법(예: 빗방울이 옥상에 닿지 않도록)으로 콜백을 사용하거나, 일부 또는 모든 파티클의 프로퍼티를 수정하기 위해 콜백을 사용할 수 있습니다.

트리거(Triggers) 모듈에는 소멸(Kill) 옵션이 있으므로 파티클을 자동으로 제거할 수도 있으며, 무시(Ignore) 옵션을 사용하면 아래와 같이 충돌 이벤트를 무시할 수도 있습니다.

파티클 시스템 트리거 모듈
파티클 시스템 트리거 모듈

이 모듈을 사용하려면 우선 트리거를 생성할 콜라이더를 추가한 다음, 사용할 이벤트를 선택해야 합니다.

다음 조건에 파티클이 해당할 경우 이벤트를 트리거하도록 설정할 수 있습니다.

  • 콜라이더 범위에 있을 때
  • 콜라이더 범위 밖에 있을 때
  • 콜라이더 범위에 진입할 때
  • 콜라이더 범위에서 벗어날 때
프로퍼티: 기능:
Inside 파티클이 콜라이더 내부에 있을 때 이벤트를 트리거하려면 콜백(Callback)을 선택합니다. 파티클이 콜라이더 내부에 있을 때 이벤트를 트리거하지 않으려면 무시(Ignore)를 선택합니다. 콜라이더의 파티클을 파괴하려면 소멸(Kill)을 선택합니다.
Outside 파티클이 콜라이더 외부에 있을 때 이벤트를 트리거하려면 콜백(Callback)을 선택합니다. 파티클이 콜라이더 외부에 있을 때 이벤트를 트리거하지 않으려면 무시(Ignore)를 선택합니다. 콜라이더 외부의 파티클을 파괴하려면 소멸(Kill)을 선택합니다.
Enter 파티클이 콜라이더에 진입할 때 이벤트를 트리거하려면 콜백(Callback)을 선택합니다. 파티클이 콜라이더에 진입할 때 이벤트를 트리거하지 않으려면 무시(Ignore)를 선택합니다. 콜라이더에 진입하는 파티클을 파괴하려면 소멸(Kill)을 선택합니다.
Exit 파티클이 콜라이더를 벗어날 때 이벤트를 트리거하려면 콜백(Callback)을 선택합니다. 파티클이 콜라이더를 벗어날 때 이벤트를 트리거하지 않으려면 무시(Ignore)를 선택합니다. 콜라이더를 벗어나는 파티클을 파괴하려면 소멸(Kill)을 선택합니다.
Radius Scale 이 파라미터는 파티클 콜라이더의 범위를 설정하므로 파티클이 콜라이더에 접촉하기 전이나 후에 이벤트가 발생할 수 있습니다. 예를 들어, 충돌이 일어나기 전에 파티클이 콜라이더 오브젝트의 표면을 통과하는 것으로 표시되도록 할 수 있습니다. 이 경우 반지름 스케일을 1보다 약간 작게 설정합니다. 이벤트가 실제로 발생하면 이 설정이 변경되지 않습니다. 하지만 이 설정으로 인해 트리거의 시각 효과를 지연시키거나 향상시킬 수 있습니다.
- 파티클이 콜라이더에 접촉할 때 이벤트가 나타나도록 하려면 1을 입력합니다.
- 파티클이 콜라이더를 통과한 후에 트리거가 나타나도록 하려면 1보다 작은 값을 입력합니다.
- 파티클이 콜라이더를 통과한 후에 트리거가 나타나도록 하려면 1보다 큰 값을 입력합니다.
Visualize Bounds 이 옵션을 사용하면 에디터 창에서 파티클 콜라이더의 범위를 표시할 수 있습니다.

콜백 내부에서 지정할 ParticleSystemTriggerEventType과 함께 ParticlePhysicsExtensions.GetTriggerParticles()를 사용하여 기준에 맞는 파티클을 결정해야 합니다.

아래의 예제에서 파티클은 콜라이더에 진입할 때 빨간색으로 변한 다음, 콜라이더의 범위를 벗어날 때 다시 녹색으로 변합니다.

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);
    }
}

위의 예제의 결과는 아래 그림과 같습니다.

에디터 뷰
에디터 뷰
게임 뷰
게임 뷰
충돌 모듈
서브 이미터 모듈