이벤트 핸들러
Niagara의 이벤트 시스템으로 파티클 간, Emitter 간 통신을 구현합니다.
이벤트 시스템 개요
Generate Event와 Event Handler의 관계
Niagara의 이벤트 시스템은 Generate Event(이벤트 생성)와 Event Handler(이벤트 수신/처리)의 쌍으로 구성됩니다. 하나의 Emitter에서 이벤트를 발생시키면, 같은 System 내의 다른 Emitter가 이를 수신하여 반응할 수 있습니다.
Emitter A (이벤트 생성자)
Particle Update:
Generate Death Event // 파티클 소멸 시 이벤트 발생
Generate Location Event // 매 프레임 위치 이벤트 발생
↓ 이벤트 데이터 전달 ↓
Emitter B (이벤트 수신자)
Event Handler:
Receive Death Event // 사망 이벤트 수신
→ Spawn Particles // 해당 위치에 새 파티클 생성
이벤트 시스템은 CPU Sim에서만 동작합니다. GPU Sim에서는 이벤트가 동작하지 않으며, 대신 Data Channel을 사용해야 합니다. 이벤트가 필요한 Emitter는 반드시 Sim Target을 CPUSim으로 설정하세요.
이벤트 타입
Death, Location, Collision Event
| 이벤트 타입 | 발생 시점 | 전달 데이터 | 용도 |
|---|---|---|---|
| Death Event | 파티클 소멸 시 | Position, Velocity, Color 등 | 폭발 → 파편, 불꽃 소멸 → 연기 |
| Location Event | 매 프레임 (Particle Update) | Position, Velocity 등 | 트레일 생성, 연속적 이펙트 연결 |
| Collision Event | 파티클 충돌 시 | Position, Normal, Velocity | 충돌 지점에 스파크/데칼 생성 |
| Custom Event | 조건 충족 시 | 사용자 정의 데이터 | 게임 로직에 따른 커스텀 반응 |
// Emitter A: 불꽃 파티클
Particle Update:
Generate Death Event
{
Event Name: "FireDeath"
// 자동으로 Position, Velocity 등이 포함됨
}
// Emitter B: 연기 파티클
Event Handler: ("FireDeath" 이벤트 수신)
{
Execution Mode: Spawned Particles
// Spawned Particles: 이벤트마다 새 파티클 생성
// Every Particle: 기존 모든 파티클에 적용
Spawn Number: 5
// 불꽃 하나 소멸당 연기 5개 생성
Receive Modules:
Receive Death Event // 이벤트 데이터 수신
Set (Particles.Position) = EventPayload.Position
Set (Particles.Color) = (0.3, 0.3, 0.3, 0.8)
}
Event Handler 설정
수신 모드와 실행 방식
Execution Mode
| 모드 | 동작 | 사용 사례 |
|---|---|---|
Spawned Particles |
이벤트당 새 파티클 N개 생성 | 소멸 → 스파크, 충돌 → 파편 |
Every Particle |
수신 Emitter의 모든 기존 파티클에 적용 | 전체 색상 변경, 일괄 속도 변경 |
Single Particle |
매칭되는 하나의 파티클에만 적용 | 특정 파티클 추적/수정 |
Event Handler 추가 방법
// Emitter의 스택에서
+ 버튼 → Add Event Handler
// Event Handler Properties 설정
{
Source: 이벤트를 생성하는 Emitter 선택
Event Name: 이벤트 이름 (Generate에서 설정한 것)
Execution Mode: Spawned Particles
Spawn Number: 3
Max Events Per Frame: 100 // 프레임당 최대 이벤트 수 제한
}
// Event Handler 내부에 모듈 추가
Receive [Event Type] Event // 이벤트 데이터 바인딩
Set (Particles.Position) // 이벤트 위치에 생성
Add Velocity // 방사형 속도 추가
프레임당 처리할 수 있는 이벤트 수를 Max Events Per Frame으로 제한하세요. 대량의 파티클이 동시에 소멸하면 한 프레임에 수천 개의 이벤트가 발생할 수 있으며, 이는 CPU 스파이크의 원인이 됩니다.
실전 패턴: 연쇄 이펙트
불꽃 → 연기 → 재 연쇄 반응
NS_ChainReaction
Emitter 1: Fire (CPU Sim)
Spawn Rate: 50
Lifetime: 1.0
Generate Death Event: "FireDied"
Emitter 2: Smoke (CPU Sim)
// Fire Death 이벤트 수신
Event Handler ("FireDied"):
Execution: Spawned Particles
Spawn Number: 3
Lifetime: 3.0
Color: Gray, Scale up
Generate Death Event: "SmokeDied"
Emitter 3: Ash (CPU Sim)
// Smoke Death 이벤트 수신
Event Handler ("SmokeDied"):
Execution: Spawned Particles
Spawn Number: 2
Lifetime: 5.0
Size: Very small
Gravity: Light downward
// 결과: 불꽃 소멸 → 연기 생성 → 연기 소멸 → 재 생성
핵심 요약
- 이벤트 시스템은 Generate Event + Event Handler 쌍으로 구성되며, CPU Sim에서만 동작합니다.
- 주요 이벤트 타입: Death, Location, Collision, Custom
- Event Handler의 Execution Mode: Spawned Particles(새 생성), Every Particle(전체 적용), Single Particle(개별)
Max Events Per Frame으로 프레임당 이벤트 수를 제한하여 CPU 스파이크를 방지하세요.- 이벤트를 체인으로 연결하면 연쇄 이펙트(불꽃→연기→재)를 구현할 수 있습니다.
- GPU Sim에서는 이벤트 대신 Data Channel을 사용해야 합니다.
도전 과제
배운 내용을 직접 실습해보세요
파티클이 표면에 충돌할 때 Generate Collision Event를 발생시키고, Event Handler로 충돌 위치에 새로운 파티클(먼지 구름)을 스폰하는 이벤트 체인을 구현하세요.
파티클 소멸 시 Generate Death Event를 사용하여, 소멸 위치에서 작은 서브 파티클이 폭발하듯 퍼지는 이차 이펙트를 만드세요. 원래 파티클의 색상과 속도를 상속하세요.
파티클의 특정 조건(예: 속도가 임계값 이하, 특정 영역 진입)을 감지하여 커스텀 이벤트를 발생시키고, 다른 이미터에서 이를 받아 반응하는 복합 이벤트 시스템을 구현하세요.