icon안동민 개발노트

동적 파라미터 업데이트하기


 나이아가라 시스템의 파라미터를 블루프린트를 통해 동적으로 업데이트하면 게임플레이와 긴밀하게 연동된 반응적인 파티클 효과를 만들 수 있습니다.

 이 절에서는 다양한 유형의 파라미터를 실시간으로 제어하는 방법과 고급 기법을 살펴보겠습니다.

파라미터 유형별 접근 및 수정 방법

 1. 시스템 파라미터 업데이트

  • 시스템 전체에 영향을 미치는 파라미터를 수정합니다.
[Set Niagara Variable] 노드 사용
입력:
- Niagara Component: 대상 나이아가라 컴포넌트
- Variable Name: "SystemGravity"
- Value: 새로운 중력 값 (예: Vector3D)

 2. 이미터 파라미터 수정

  • 특정 이미터의 동작을 제어하는 파라미터를 변경합니다.
[Set Niagara Variable] 노드 사용
입력:
- Niagara Component: 대상 컴포넌트
- Variable Name: "EmitterName.SpawnRate"
- Value: 새로운 스폰 속도 값

 3. 파티클 속성 변경

  • 개별 파티클의 속성을 동적으로 조절합니다.
[Set Niagara Variable] 노드 사용
입력:
- Niagara Component: 대상 컴포넌트
- Variable Name: "Particles.Color"
- Value: 새로운 색상 값 (Linear Color)

게임 상태에 따른 동적 조정

 1. 플레이어 입력 반영

  • 플레이어의 행동에 따라 파티클 시스템을 조정합니다.
[Event Tick] 노드

[Get Player Controller] 노드

[Get Input Axis Value] 노드 (예: "MoveForward")

[Set Niagara Variable] 노드
입력:
- Variable Name: "ParticleSpeed"
- Value: 입력 축 값에 비례한 속도

 2. 환경 상태 반영

  • 게임 내 환경 변화에 따라 파티클 동작을 변경합니다.
[Get World Delta Seconds] 노드

[Get Game Mode] 노드

[Custom Event: UpdateWeatherEffect] 노드

[Switch on Enum] 노드 (현재 날씨 상태)
각 케이스:

   [Set Niagara Variable] 노드 (날씨에 따른 파라미터 설정)

커브와 데이터 테이블로 파라미터 제어

 1. 커브 기반 파라미터 제어

  • 시간에 따른 부드러운 변화를 구현합니다.
[Timeline] 노드
출력 핀:
- 커브 값 출력

   [Set Niagara Variable] 노드
   입력:
   - Variable Name: "ParticleSize"
   - Value: 커브에서 출력된 값

 2. 데이터 테이블 활용

  • 미리 정의된 값들을 효율적으로 관리하고 적용합니다.
[Get Data Table Row] 노드
입력:
- Data Table: ParticleEffectsTable
- Row Name: 현재 효과 이름
출력 핀:
- Row 구조체

   [Break ParticleEffectData] 노드

   여러 [Set Niagara Variable] 노드에 연결하여 다양한 파라미터 설정

여러 파티클 시스템 간 파라미터 동기화

 1. 마스터 컨트롤러 사용

  • 중앙 집중식 파라미터 관리를 구현합니다.
[Custom Event: SyncParticleSystems] 노드

[For Each Loop] 노드 (등록된 파티클 시스템 배열 순회)
Loop Body:

   여러 [Set Niagara Variable] 노드를 사용하여 공통 파라미터 설정

 2. 이벤트 기반 동기화

  • 특정 이벤트 발생 시 모든 관련 시스템을 업데이트합니다.
[Custom Event: OnEnvironmentChanged] 노드

[Multi-gate] 노드
각 출력 핀:

   서로 다른 파티클 시스템의 [Set Niagara Variable] 노드에 연결

성능 최적화 전략

 1. 업데이트 빈도 조절

  • 불필요한 업데이트를 줄여 성능을 향상시킵니다.
[Event Tick] 노드

[Tick Interval] 설정 (예: 0.1초)

파라미터 업데이트 로직

 2. 조건부 업데이트

  • 변경이 필요한 경우에만 파라미터를 업데이트합니다.
[Branch] 노드
조건: 이전 값과 현재 값의 차이가 임계값 초과
True 핀:

   [Set Niagara Variable] 노드

 3. 배치 업데이트

  • 여러 파라미터를 한 번에 업데이트하여 오버헤드를 줄입니다.
[Sequence] 노드
Then 0, 1, 2 핀:

   각각 다른 [Set Niagara Variable] 노드에 연결

효과적인 디버깅 방법

 1. 시각적 디버깅

  • 파라미터 값을 시각적으로 표현하여 쉽게 확인합니다.
[Print String] 노드 사용
입력:
- In String: 현재 파라미터 값을 문자열로 변환

 2. 로그 기반 디버깅

  • 중요한 파라미터 변경을 로그에 기록합니다.
[Custom Event: LogParameterChange] 노드
입력:
- Parameter Name
- New Value

[Print Log] 노드

 3. 런타임 파라미터 뷰어

  • 게임 내에서 실시간으로 파라미터를 확인하고 수정할 수 있는 디버그 UI를 만듭니다.
[Create Widget] 노드 (디버그 UI 위젯 생성)

[Add to Viewport] 노드
위젯 블루프린트 내:
   [Slider] 또는 [Text Box] 컴포넌트를 사용하여 파라미터 값 표시 및 수정

적용 예시 : 날씨 변화에 따른 파티클 조정

 다음은 게임 내 날씨 변화에 따라 여러 파티클 시스템의 파라미터를 동적으로 조정하는 블루프린트 로직의 예시입니다.

  1. 날씨 변화 감지
  2. 데이터 테이블에서 해당 날씨에 대한 파라미터 값 로드
  3. 여러 파티클 시스템에 파라미터 적용
  4. 부드러운 전환을 위한 보간 적용
[Custom Event: OnWeatherChanged] 노드
입력:
- New Weather Type (Enum)

[Get Data Table Row] 노드
입력:
- Data Table: WeatherParticleEffectsTable
- Row Name: New Weather Type
출력:
- Row 구조체

  [Break WeatherParticleData] 노드

  [For Each Loop] 노드 (파티클 시스템 배열 순회)
  Loop Body:

    [Timeline] 노드 (부드러운 전환을 위한 보간)
    출력:
    - Alpha (0에서 1로 변화)

      여러 [Lerp] 노드 (현재 값과 목표 값 사이 보간)

      여러 [Set Niagara Variable] 노드
      입력:
      - Niagara Component: 현재 순회 중인 시스템
      - Variable Names: "WindSpeed", "RainIntensity", "SnowAmount" 등
      - Values: 보간된 값들

 이 예시에서는 날씨 변화 이벤트가 발생할 때마다 데이터 테이블에서 적절한 파라미터 값을 로드하고 이를 모든 관련 파티클 시스템에 부드럽게 적용합니다.

 타임라인을 사용한 보간을 통해 급격한 변화 대신 자연스러운 전환 효과를 만들어냅니다.

 블루프린트를 통한 동적 파라미터 업데이트는 나이아가라 시스템의 유연성을 크게 향상시킵니다.

 게임 상태, 플레이어 입력, 환경 변화 등 다양한 요소에 실시간으로 반응하는 파티클 효과를 만들 수 있습니다.