간단한 이벤트 핸들러 설정
파티클 소멸 이벤트를 발생·수신하는 이미터를 연결해 원본 파티클이 사라질 때 폭발 파티클을 생성합니다.
지금까지 파티클 생성(Spawn 모듈)과 파티클 업데이트(Particle Update 모듈)를 다뤘습니다.
이번 절에서는 한 CPU 이미터가 발생시킨 이벤트를 같은 시스템의 다른 이미터가 받는 Event Handler를 다룹니다. 이 이벤트 방식은 GPU 시뮬레이션에서 지원되지 않으며, 게임 코드로 보내는 콜백과도 구분합니다.
간단히 말해, 이벤트 핸들러는 만약 A라는 상황이 발생하면, B라는 일을 해라라고 파티클 시스템에게 지시하는 방법입니다.
이는 더욱 복잡하고 상호작용적인 시각 효과를 만드는 데 필수적입니다.
이벤트 핸들러란 무엇인가요?
이벤트 핸들러는 나이아가라 시스템에서 특정 조건(예: 파티클 충돌, 파티클 소멸 등)이 발생했을 때, 미리 정의된 동작을 수행하도록 연결하는 기능입니다.
이를 통해 여러 이미터 간에 상호작용을 구현하거나, 파티클의 상태 변화에 따라 새로운 효과를 트리거할 수 있습니다.
주로 다음과 같은 상황에서 이벤트 핸들러를 사용합니다.
- 파티클의 소멸 시점: 파티클이 수명을 다해 사라질 때 폭발 효과를 낸다거나, 잔여 파티클을 생성하는 경우.
- 파티클의 충돌: 파티클이 월드 또는 다른 오브젝트와 충돌할 때 스파크나 파편을 추가로 생성하는 경우. 소리를 내려면 별도의 오디오 연결이 필요합니다.
- 특정 임계값 도달: 파티클의 속도나 크기에 대한 사용자 정의 이벤트 발생 조건을 구현해 다른 파티클을 생성하는 경우.
이벤트 핸들러의 구성 요소
이벤트 핸들러는 크게 두 가지 부분으로 구성됩니다.
이벤트 발생기 (Event Generator): 특정 조건이 충족되었을 때 이벤트를 발생시키는 모듈입니다.
주로 Particle Update 섹션에 위치합니다.
이벤트 수신기 (Event Receiver): 발생한 이벤트를 수신하여 미리 정의된 동작을 수행하는 모듈입니다.
수신 이미터의 Event Handler 그룹에 해당 Receive Event 모듈을 둡니다.
가장 흔하게 사용되는 예시인 파티클 소멸 시 다른 파티클 생성을 통해 이벤트 핸들러의 기본 사용법을 알아보겠습니다.
직접 해보기: 폭발 효과 추가하기
이전 절에서 만든 NS_BasicSpawn 시스템을 확장하여, 파티클이 수명을 다해 사라질 때 작은 폭발 효과를 추가해 보겠습니다.
이벤트 발생기 설정
소멸 이벤트에는 Generate Death Event를 사용합니다. Generate Location Event는 살아 있는 입자의 위치를 보내는 용도이므로 소멸 알림과 다릅니다.
NS_BasicSpawn을 열고 기존 이미터의 Sim Target을 CPU로 확인합니다. Emitter Properties에서 Requires Persistent IDs를 켭니다.
Particle Update에서 수명 종료를 처리하는 Particle State를 확인하고 Generate Death Event를 추가합니다. 모듈의 의존성 안내를 따릅니다.
기준 입자의 Lifetime과 움직임을 확인합니다. 이벤트가 발생하는 시점과 위치를 구별하기 쉽도록 낮은 Spawn Rate로 시작합니다.
새로운 이미터 추가: 소멸 시 폭발용 이미터
System Overview를 우클릭해 Add Emitter에서 Simple Sprite Burst 템플릿을 추가하고 BurstOnDeath로 이름을 바꿉니다. 이 이미터도 CPU 시뮬레이션을 사용합니다. 생성 창의 버튼명은 엔진 버전에 따라 다를 수 있습니다.
이벤트 수신기 설정
BurstOnDeath의 Emitter Update에서 템플릿의 Spawn Burst Instantaneous나 Spawn Rate를 제거하거나 비활성화합니다. 이번 실습에서는 이벤트만 입자를 생성해야 합니다. Emitter State와 System State는 이벤트를 기다리는 동안 수신 이미터가 계속 활성 상태를 유지하도록 설정합니다.
Add Event Handler로 Event Handler 그룹을 추가합니다. Event Handler Properties의 Source에서 원본 이미터와 그 이미터의 Death 이벤트를 선택합니다. 임의의 문자열 경로를 입력하는 대신 실제 발생기를 선택합니다.
Execution Mode를 Spawned Particles, Spawn Number를 1로 설정하고 Random Spawn Number를 끕니다. 이는 이벤트당 새 파티클 한 개를 뜻하며 별도의 폭발 시스템 한 개를 생성한다는 뜻은 아닙니다.
같은 Event Handler 그룹에 Receive Death Event를 추가해 소멸 이벤트의 위치 등을 수신합니다. 두 이미터의 좌표 공간과 속도 상속 설정도 확인합니다.
Particle Spawn의 Initialize Particle에서 Lifetime 0.5, Sprite Size 20.0, 주황색이나 노란색을 설정합니다. Particle Update의 Particle State와 Render의 Sprite Renderer·머티리얼도 확인합니다.
CPU 시뮬레이션 예입니다. 원본에는 Persistent IDs가 필요하며 수신 이미터는 이벤트를 처리할 동안 활성 상태여야 합니다.
정상 연결의 기대 결과는 원본 입자의 수명 종료 위치에 짧게 살아 있는 새 입자 한 개가 생기는 것입니다. 템플릿이 독립적으로 원점에서 Burst를 내는지와 이벤트 응답을 구분해 관찰합니다.
이벤트 핸들러의 다른 활용 예시
- 충돌 이벤트: Collision의 결과를 Generate Collision Event로 보내고 수신 이미터의 Receive Collision Event와 연결합니다.
- 외부 제어: Blueprint·C++의 User Parameter나 지원되는 데이터 전달 기능으로 효과를 제어할 수 있습니다. 이것을 위의 CPU 이미터 Event Handler와 같은 설정으로 취급하지 않습니다.
- 사용자 정의 조건: 임계값 이벤트는 발생 조건과 데이터 형식을 직접 설계해야 합니다. 표준 모듈 이름을 가정해 검색하는 것으로 구현이 끝나지 않습니다.
반응이 없으면 CPU 대상·Persistent IDs·수명 종료·Source를 확인합니다. 위치가 다르면 좌표 공간과 Receive 모듈을, 너무 많으면 이벤트당 Spawn Number와 처리 이벤트 제한을 확인합니다. 프레임당 제한 때문에 초과 이벤트가 무시될 수 있습니다.
Event Handler 공식 설정을 기준으로 소스 이벤트와 실행 모드를 확인합니다.