icon안동민 개발노트

이벤트 기반 파티클 스폰


 게임 내 이벤트에 반응하여 파티클을 동적으로 스폰하는 시스템은 생동감 있는 게임 환경을 만드는 데 중요한 역할을 합니다.

 이 절에서는 블루프린트를 사용하여 효과적인 이벤트 기반 파티클 스폰 시스템을 구현하는 방법을 살펴보겠습니다.

다양한 게임 이벤트별 파티클 효과 트리거

 1. 충돌 이벤트 처리

  • 물체 간 충돌 시 파티클 효과를 생성합니다.
[Event Hit] 노드

[Spawn Emitter at Location] 노드
입력:
- Emitter Template: 충돌 효과 파티클 시스템
- Location: Hit Result의 Impact Point

 2. 데미지 이벤트 처리

  • 캐릭터가 데미지를 받을 때 파티클 효과를 표시합니다.
[Event Any Damage] 노드

[Spawn Niagara System at Location] 노드
입력:
- System: 데미지 효과 나이아가라 시스템
- Location: 데미지를 받은 액터의 위치

 3. 아이템 획득 이벤트

  • 아이템 획득 시 시각적 피드백을 제공합니다.
[Custom Event: OnItemPickup] 노드

[Spawn Emitter Attached] 노드
입력:
- Emitter Template: 아이템 획득 효과
- Attach to Component: 플레이어 캐릭터의 루트 컴포넌트

이벤트 데이터를 파티클 시스템에 전달

 이벤트의 세부 정보를 파티클 시스템에 전달하여 효과를 커스터마이즈합니다.

[Custom Event: OnElementalDamage] 노드
입력:
- Damage Type (열거형: Fire, Ice, Lightning)
- Damage Amount (Float)

[Spawn Niagara System at Location] 노드

[Set Niagara Variable] 노드들
입력:
- Niagara Component: 스폰된 시스템
- Variable Names: "DamageType", "EffectIntensity"
- Values: 이벤트에서 받은 Damage Type과 Amount

조건부 파티클 스폰 로직

 게임 상태나 성능 요구사항에 따라 파티클 스폰을 조절합니다.

[Custom Event: OnEffectTrigger] 노드

[Branch] 노드
조건: (현재 FPS > 30) AND (거리 < 1000)
True 핀:

  [Spawn Niagara System at Location] 노드 (고품질 효과)
False 핀:

  [Spawn Niagara System at Location] 노드 (저품질 효과 또는 스폰 생략)

파티클 풀링 시스템 구현

 성능 최적화를 위해 파티클 시스템을 재사용합니다.

[Custom Event: GetParticleFromPool] 노드

[For Each Loop] 노드 (파티클 풀 배열 순회)
Loop Body:
  [Branch] 노드
  조건: 현재 파티클 시스템이 비활성 상태인가?
  True 핀:

    [Activate] 노드 (파티클 시스템 활성화)

    [Set Actor Location] 노드 (위치 설정)

    [Return Node] (찾은 파티클 시스템 반환)
 
Loop Completed 핀:

  [Spawn Niagara System at Location] 노드 (새 시스템 생성 및 풀에 추가)

다중 이벤트 처리를 위한 큐 시스템

 동시에 여러 이벤트가 발생할 때 효과적으로 처리합니다.

[Custom Event: AddEffectToQueue] 노드
입력:
- Effect Type
- Location
- Intensity

[Add to Array] 노드 (효과 정보를 큐 배열에 추가)
 
[Event Tick] 노드

[Branch] 노드
조건: 큐 배열의 길이 > 0
True 핀:

  [Array Get] 노드 (큐의 첫 번째 항목 처리)

  [Spawn Niagara System at Location] 노드

  [Remove At] 노드 (처리된 항목 제거)

대규모 게임에서의 효율적인 관리 전략

 1. 우선순위 시스템 구현

  • 중요도에 따라 파티클 효과의 스폰 우선순위를 설정합니다.
[Custom Event: SpawnPrioritizedEffect] 노드
입력:
- Effect Type
- Priority (Integer)

[Sort Array by Property] 노드 (우선순위에 따라 효과 큐 정렬)

처리 로직 (상위 N개의 효과만 실제로 스폰)

 2. 레벨 기반 LOD 시스템

  • 플레이어와의 거리에 따라 파티클 시스템의 복잡도를 조절합니다.
[Custom Event: SpawnEffectWithLOD] 노드

[Get Distance To] 노드 (플레이어와의 거리 계산)

[Select Object] 노드
입력:
- 조건에 따라 다른 복잡도의 파티클 시스템 선택

[Spawn Niagara System at Location] 노드

성능 최적화 방법

 1. 비동기 스폰

  • 메인 스레드의 부하를 줄이기 위해 비동기 스폰을 사용합니다.
[Spawn Niagara System Async] 노드
입력:
- World Context Object
- System: 스폰할 나이아가라 시스템
- Location: 스폰 위치
- Rotation: 초기 회전
- Scale: 크기
- Auto Destroy: 자동 제거 여부
- Auto Activate: 자동 활성화 여부
출력:
- Success: 스폰 성공 시 실행될 로직
- Failure: 스폰 실패 시 실행될 로직

 2. 배치 처리

  • 여러 파티클 효과를 한 번에 처리하여 오버헤드를 줄입니다.
[Custom Event: ProcessEffectBatch] 노드
입력:
- Effect Batch (구조체 배열)

[For Each Loop] 노드
Loop Body:

   [Spawn Niagara System at Location] 노드

디버깅 기법

 1. 시각적 디버그 로그

  • 파티클 스폰 이벤트를 시각적으로 표시합니다.
[Draw Debug Sphere] 노드
입력:
- Center: 파티클 스폰 위치
- Color: 이벤트 유형에 따른 색상
- Duration: 1.0 (1초간 표시)

 2. 성능 모니터링

  • 파티클 시스템의 수와 처리 시간을 모니터링합니다.
[Create Widget] 노드 (성능 디스플레이 위젯)

[Add to Viewport] 노드
 
위젯 블루프린트 내:
[Event Tick] 노드

[Get All Actors Of Class] 노드 (NiagaraActor 클래스)

[Array Length] 노드

[Set Text] 노드 (활성 파티클 시스템 수 표시)

효과적인 파티클 효과 설계 팁

 1. 모듈화

  • 재사용 가능한 기본 효과를 만들고 이를 조합하여 복잡한 효과를 생성합니다.

 2. 컨텍스트 고려

  • 게임의 환경과 분위기에 맞는 파티클 효과를 설계합니다.

 3. 피드백 강화

  • 게임플레이 액션과 시각적 효과를 긴밀히 연결하여 플레이어 피드백을 강화합니다.

적용 예시 : 동적 전투 효과 시스템

 다음은 전투 상황에서 다양한 이벤트에 반응하여 파티클 효과를 생성하는 시스템의 구현 예시입니다.

[Custom Event: OnCombatEvent] 노드
입력:
- Event Type (열거형: Attack, Defend, SpecialAbility)
- Location
- Intensity (Float)

[Switch on Enum] 노드
Case: Attack

  [Spawn Niagara System at Location] 노드 (공격 효과)

  [Set Niagara Variable] 노드 (Intensity 설정)
Case: Defend

  [Get Particle From Pool] 노드 (방어 효과)

  [Set Actor Location] 노드

  [Set Niagara Variable] 노드 (Intensity 설정)
Case: SpecialAbility

  [Enqueue Unique Particle Effect] 노드 (커스텀 함수)
  내부 로직:
    - 우선순위 큐에 효과 추가
    - 성능 상태 확인
    - 필요시 낮은 우선순위 효과 제거
 
[Event Tick] 노드

[Process Effect Queue] 노드 (커스텀 함수)
내부 로직:
  - 큐에서 효과 꺼내기
  - LOD 레벨 결정
  - 비동기 스폰 실행

 이 시스템은 전투 중 발생하는 다양한 이벤트(공격, 방어, 특수 능력 등)에 대응하여 적절한 파티클 효과를 생성합니다.

 풀링, 큐잉, LOD, 비동기 스폰 등의 기법을 활용하여 성능을 최적화하면서도 시각적으로 인상적인 효과를 제공합니다.

 이벤트 기반 파티클 스폰 시스템은 게임에 역동성과 시각적 피드백을 더해줍니다.