PART 6 · 강의 1/3

이벤트 핸들러

Niagara의 이벤트 시스템으로 파티클 간, Emitter 간 통신을 구현합니다.

01

이벤트 시스템 개요

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 전용

이벤트 시스템은 CPU Sim에서만 동작합니다. GPU Sim에서는 이벤트가 동작하지 않으며, 대신 Data Channel을 사용해야 합니다. 이벤트가 필요한 Emitter는 반드시 Sim Target을 CPUSim으로 설정하세요.

02

이벤트 타입

Death, Location, Collision Event

이벤트 타입 발생 시점 전달 데이터 용도
Death Event 파티클 소멸 시 Position, Velocity, Color 등 폭발 → 파편, 불꽃 소멸 → 연기
Location Event 매 프레임 (Particle Update) Position, Velocity 등 트레일 생성, 연속적 이펙트 연결
Collision Event 파티클 충돌 시 Position, Normal, Velocity 충돌 지점에 스파크/데칼 생성
Custom Event 조건 충족 시 사용자 정의 데이터 게임 로직에 따른 커스텀 반응
Death 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) }
03

Event Handler 설정

수신 모드와 실행 방식

Execution Mode

모드 동작 사용 사례
Spawned Particles 이벤트당 새 파티클 N개 생성 소멸 → 스파크, 충돌 → 파편
Every Particle 수신 Emitter의 모든 기존 파티클에 적용 전체 색상 변경, 일괄 속도 변경
Single Particle 매칭되는 하나의 파티클에만 적용 특정 파티클 추적/수정

Event Handler 추가 방법

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

프레임당 처리할 수 있는 이벤트 수를 Max Events Per Frame으로 제한하세요. 대량의 파티클이 동시에 소멸하면 한 프레임에 수천 개의 이벤트가 발생할 수 있으며, 이는 CPU 스파이크의 원인이 됩니다.

04

실전 패턴: 연쇄 이펙트

불꽃 → 연기 → 재 연쇄 반응

3단계 연쇄 이펙트
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 // 결과: 불꽃 소멸 → 연기 생성 → 연기 소멸 → 재 생성
SUMMARY

핵심 요약

  • 이벤트 시스템은 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을 사용해야 합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Collision 이벤트 핸들러

파티클이 표면에 충돌할 때 Generate Collision Event를 발생시키고, Event Handler로 충돌 위치에 새로운 파티클(먼지 구름)을 스폰하는 이벤트 체인을 구현하세요.

실습 2: Death 이벤트로 2차 이펙트

파티클 소멸 시 Generate Death Event를 사용하여, 소멸 위치에서 작은 서브 파티클이 폭발하듯 퍼지는 이차 이펙트를 만드세요. 원래 파티클의 색상과 속도를 상속하세요.

심화 과제: 커스텀 이벤트 시스템

파티클의 특정 조건(예: 속도가 임계값 이하, 특정 영역 진입)을 감지하여 커스텀 이벤트를 발생시키고, 다른 이미터에서 이를 받아 반응하는 복합 이벤트 시스템을 구현하세요.