Version: 2020.1
언어: 한국어
충돌 모듈
서브 이미터 모듈

트리거 모듈

빌트인 파티클 시스템의 트리거 모듈을 사용하면 씬에 있는 하나 이상의 콜라이더와의 상호작용을 기반으로 파티클에 액세스하고 수정할 수 있습니다. 이 모듈을 활성화하면 파티클 시스템이 연결된 스크립트에 대해 OnParticleTrigger() 콜백을 호출하며, 이를 통해 씬 내 콜라이더의 위치에 따라 파티클 리스트에 액세스할 수 있습니다.

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

트리거 모듈 사용

먼저 파티클이 상호작용할 수 있는 씬 내 콜라이더를 지정해야 합니다. 이렇게 하려면 Colliders 리스트 프로퍼티에 하나 이상의 콜라이더를 할당하십시오. 리스트의 콜라이더 수를 늘리려면 콜라이더 리스트 아래의 추가(+) 버튼을 클릭하고, 리스트에서 콜라이더를 제거하려면 콜라이더를 선택하고 제거(-) 버튼을 클릭하십시오. 리스트의 인덱스에 콜라이더를 아직 할당하지 않았다면 빈 항목 오른쪽에 있는 작은 추가(+) 버튼을 사용하여 새 콜라이더를 생성하고 할당할 수 있습니다. 그러면 새 게임 오브젝트가 파티클 시스템의 자식으로 생성되고, 스피어 콜라이더와 연결되고, 해당 콜라이더를 빈 항목에 할당합니다.

콜라이더를 추가한 후 특정 트리거 이벤트 타입을 전달하기 위한 조건이 충족될 때의 파티클 동작을 지정할 수 있습니다. 파티클이 콜라이더와 상호작용할 수 있는 방법을 설명하는 네 가지 이벤트 타입은 다음과 같습니다.

  • Inside: 파티클이 콜라이더의 경계 안에 있습니다.
  • Outside: 파티클이 콜라이더의 경계 밖에 있습니다.
  • Enter: 파티클이 콜라이더의 경계 안으로 들어갑니다.
  • Exit: 파티클이 콜라이더의 경계 밖으로 나갑니다.

인스펙터에는 이러한 이벤트 타입 각각에 대한 드롭다운이 있으며, 이를 통해 파티클이 트리거 이벤트의 조건을 통과할 경우에 수행하는 동작을 선택할 수 있습니다. 옵션은 다음과 같습니다.

  • Callback: OnParticleTrigger() 콜백 함수에서 파티클에 액세스할 수 있습니다.
  • Kill: 파티클을 파괴합니다. OnParticleTrigger() 콜백 함수에서 파티클에 액세스할 수 없습니다.
  • Ignore: 파티클을 무시합니다. OnParticleTrigger() 콜백 함수에서 파티클에 액세스할 수 없습니다.

OnParticleTrigger() 내에서 파티클에 액세스

If you select Callback as the reaction to one of the trigger events, you can access the particles that fulfill the event condition from an attached script. To do this, you first need to add the OnParticleTrigger() function to an attached script. Inside this function, call the ParticlePhysicsExtensions.GetTriggerParticles() function to get the list of particles that fulfill the trigger event’s criteria. This function takes a ParticleSystemTriggerEventType, which specifies the trigger event you want to get the particles for (Inside, Outside, Enter, or Exit), and a list of Particles which the function populates with the result. From the list, you can access, modify, or destroy any particle.

API 그리고 API를 사용하는 방법에 대한 자세한 내용은 아래 예제를 참조하십시오.

프로퍼티

프로퍼티 설명
Inside 파티클이 콜라이더 내에 있는 프레임마다 파티클 시스템이 파티클에 대해 수행하는 작업을 지정합니다. 다음과 같은 옵션이 있습니다.
Callback: OnParticleTrigger() 콜백에서 검색해서 가져올 수 있는 리스트에 파티클을 추가합니다.
Kill: 파티클을 파괴합니다.
Ignore: 파티클을 무시합니다.
Outside 파티클이 콜라이더 밖에 있는 프레임마다 파티클 시스템이 파티클에 대해 수행하는 작업을 지정합니다. 다음과 같은 옵션이 있습니다.
Callback: OnParticleTrigger() 콜백에서 검색해서 가져올 수 있는 리스트에 파티클을 추가합니다.
Kill: 파티클을 파괴합니다.
Ignore: 파티클을 무시합니다.
Enter 파티클이 콜라이더 범위 안으로 들어가는 프레임에서 파티클 시스템이 파티클에 대해 수행하는 작업을 지정합니다. 다음과 같은 옵션이 있습니다.
Callback: OnParticleTrigger() 콜백에서 검색해서 가져올 수 있는 리스트에 파티클을 추가합니다.
Kill: 파티클을 파괴합니다.
Ignore: 파티클을 무시합니다.
Exit 파티클이 콜라이더 범위 밖으로 나가는 프레임에서 파티클 시스템이 파티클에 대해 수행하는 작업을 지정합니다. 다음과 같은 옵션이 있습니다.
Callback: OnParticleTrigger() 콜백에서 검색해서 가져올 수 있는 리스트에 파티클을 추가합니다.
Kill: 파티클을 파괴합니다.
Ignore: 파티클을 무시합니다.
Radius Scale 파티클의 콜라이더 경계입니다. 이를 통해 파티클의 콜라이더 경계를 파티클의 시각적 모습에 더 가깝게 맞출 수 있습니다. 이는 파티클이 원형이고 해당 텍스처에 페이드인이 있는 경우에 유용한데, 그 이유는 파티클이 시각적으로 보이기 전에 기본 파티클 콜라이더가 트리거 내부에 있기 때문입니다. 단, 이 설정은 이벤트가 실제로 트리거될 때 변경되지 않지만, 트리거의 시각적 효과를 지연시키거나 진행시킬 수 있습니다.

1을 입력하면 파티클 콜라이더를 동일한 크기로 유지하고, 파티클이 콜라이더에 닿을 때 이벤트가 발생하는 것처럼 보입니다.
1보다 작은 값을 입력하면 파티클 콜라이더가 더 작아지고, 파티클이 콜라이더를 관통한 후 트리거가 발생하는 것처럼 보입니다.
1보다 큰 값을 입력하면 파티클 콜라이더가 더 커지고, 파티클이 콜라이더를 관통하기 전에 트리거가 발생하는 것처럼 보입니다.
Visualize Bounds 씬 뷰에서 각 파티클의 콜라이더 경계를 표시할지 여부를 나타냅니다. 이 프로퍼티를 활성화하면 콜라이더 경계를 표시하고, 비활성화하면 콜라이더 경계를 숨깁니다.

예제

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

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

이 예제의 결과는 아래 이미지를 참조하십시오.

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