icon안동민 개발노트

블루프린트에서 제어하기


 블루프린트는 언리얼 엔진에서 나이아가라 파티클 시스템을 제어하는 강력하고 유연한 방법을 제공합니다.

 이 절에서는 블루프린트를 사용하여 나이아가라 시스템을 효과적으로 관리하고 조작하는 다양한 기법을 살펴보겠습니다.

기본적인 제어 방법

 1. 나이아가라 시스템 스폰

  • 블루프린트에서 나이아가라 시스템을 동적으로 생성할 수 있습니다.
[Spawn Niagara System at Location] 노드 사용
입력:
- System: 스폰할 나이아가라 시스템 에셋
- Location: 스폰 위치
- Rotation: 초기 회전
출력:
- Niagara Component: 생성된 나이아가라 컴포넌트 참조

 2. 활성화/비활성화

  • 시스템의 활성 상태를 제어합니다.
[Activate] 또는 [Deactivate] 노드 사용
입력:
- Target: 나이아가라 컴포넌트 참조

 3. 파라미터 조정

  • 실행 중인 시스템의 파라미터를 동적으로 변경할 수 있습니다.
[Set Niagara Variable] 노드 사용
입력:
- Niagara Component: 대상 컴포넌트
- Variable Name: 변경할 변수 이름 (예 : "EmitterSpeed")
- Value: 새로운 값

이벤트 기반 파티클 효과 트리거

 게임 이벤트에 반응하여 파티클 효과를 트리거할 수 있습니다.

[Event Any Damage] 노드 연결

[Spawn Niagara System at Location] 노드
입력:
- System: 데미지 효과 파티클 시스템
- Location: Hit Location (데미지 이벤트에서 제공)

게임플레이 이벤트와 파티클 시스템 연동

 캐릭터 동작이나 환경 변화와 같은 게임플레이 요소를 파티클 시스템과 연동할 수 있습니다.

[Event Tick] 노드

[Get Player Character] 노드

[Get Velocity] 노드

[Set Niagara Variable] 노드
입력:
- Niagara Component: 캐릭터에 부착된 나이아가라 컴포넌트
- Variable Name: "CharacterSpeed"
- Value: Velocity 벡터의 길이

동적으로 파티클 속성 변경

 게임 상태에 따라 파티클의 속성을 실시간으로 변경할 수 있습니다.

[Timeline] 노드 (시간에 따른 값 변화를 위해)

[Set Niagara Variable] 노드
입력:
- Variable Name: "ParticleSize"
- Value: Timeline 출력값

블루프린트와 나이아가라 간 데이터 교환

 1. 사용자 정의 구조체 활용

  • 복잡한 데이터를 효율적으로 전달하기 위해 사용자 정의 구조체를 사용합니다.
[Make CustomData Struct] 노드

[Set Niagara Variable] 노드
입력:
- Variable Name: "CustomParticleData"
- Value: 생성된 구조체

 2. 배열 데이터 전송

  • 다수의 값을 한 번에 전송할 때 유용합니다.
[Make Array] 노드

[Set Niagara Variable] 노드 (배열 타입 변수에 연결)

성능 고려사항

 1. 업데이트 빈도 최적화

  • 불필요한 업데이트를 피하기 위해 조건부 실행을 사용합니다.
[Branch] 노드
조건: 이전 값과 현재 값의 차이가 임계값을 초과하는지 확인
True 핀: [Set Niagara Variable] 노드로 연결

 2. 배치 업데이트

  • 여러 변수를 한 번에 업데이트하여 성능을 향상시킵니다.
[Sequence] 노드를 사용하여 여러 [Set Niagara Variable] 노드를 연결

 3. LOD (Level of Detail) 구현

  • 거리에 따라 파티클 시스템의 복잡도를 조절합니다.
[Get Distance To] 노드

[Select Float] 노드 (거리에 따른 LOD 레벨 선택)

[Set Niagara Variable] 노드 (LOD 레벨 설정)

Best Practices

 1. 모듈화

  • 재사용 가능한 함수를 만들어 복잡한 로직을 관리합니다.
[Create Function] 노드 사용
예: "UpdateParticleSystemBasedOnGameState" 함수 생성

 2. 데이터 주도 설계

  • 하드코딩된 값 대신 데이터 테이블이나 변수를 사용합니다.
[Get Data Table Row] 노드

[Set Niagara Variable] 노드

 3. 이벤트 기반 프로그래밍

  • 지속적인 폴링 대신 이벤트 기반 접근 방식을 사용합니다.
[Custom Event] 노드 생성 (예: "OnGameStateChanged")
이 이벤트를 게임 상태 변경 시 호출하여 파티클 시스템 업데이트

 4. 디버깅 기능 구현

  • 개발 중 파티클 시스템을 쉽게 조정할 수 있는 디버깅 도구를 만듭니다.
[Add Debug Message] 노드를 사용하여 중요 값들을 로그에 기록
[Draw Debug Sphere] 노드로 파티클 생성 위치 시각화

적용 예시 : 캐릭터 속도에 따른 파티클 효과

 다음은 캐릭터의 이동 속도에 따라 파티클 효과를 동적으로 조절하는 블루프린트 로직의 예시입니다.

  1. 캐릭터 블루프린트의 Event Tick에서 시작
  2. 캐릭터의 현재 속도 계산
  3. 속도에 따라 파티클 시스템 파라미터 업데이트
  4. 특정 속도 임계값을 넘으면 추가 효과 활성화
[Event Tick]

[Get Velocity] 노드 (캐릭터의 현재 속도 벡터 획득)

[VectorLength] 노드 (속도의 스칼라 값 계산)

[Set Niagara Variable] 노드
입력:
- Niagara Component: 캐릭터에 부착된 나이아가라 컴포넌트
- Variable Name: "CharacterSpeed"
- Value: 계산된 속도 값

[Branch] 노드
조건: 속도 > 임계값 (예: 500)
True 핀:

  [Set Niagara Variable] 노드
  입력:
  - Variable Name: "EnableSpeedTrail"
  - Value: true
False 핀:

  [Set Niagara Variable] 노드
  입력:
  - Variable Name: "EnableSpeedTrail"
  - Value: false

 이 예시에서는 캐릭터의 속도를 지속적으로 모니터링하고 그 값을 나이아가라 시스템에 전달합니다.

 속도가 특정 임계값을 초과하면 추가적인 파티클 효과(예 : 속도 흔적)를 활성화합니다.

 이러한 방식으로 게임플레이 요소와 시각적 효과를 긴밀하게 연동할 수 있습니다.

 블루프린트를 사용하여 나이아가라 시스템을 제어하면 프로그래밍 지식 없이도 복잡하고 동적인 파티클 효과를 구현할 수 있습니다.