동적 파라미터 업데이트하기
이전 절에서 우리는 나이아가라 시스템을 블루프린트에 추가하고 활성화/비활성화하며, 기본적인 사용자 변수를 제어하는 방법을 배웠습니다. 이제 한 걸음 더 나아가, 게임 플레이 중 나이아가라 시스템의 파라미터(Parameters) 를 블루프린트에서 지속적으로, 그리고 동적으로 업데이트하는 방법에 대해 알아보겠습니다. 이는 캐릭터의 체력에 따라 이펙트의 색상이 변하거나, 주변 환경의 속도에 맞춰 파티클의 움직임이 조절되거나, 특정 목표를 추적하는 파티클을 만드는 등 훨씬 더 복잡하고 유기적인 상호작용을 구현하는 핵심 기술입니다.
파라미터를 동적으로 업데이트하는 것은 나이아가라 시스템이 정적인 효과에 머무르지 않고, 게임 세계와 실시간으로 반응하도록 만드는 강력한 도구입니다.
동적 파라미터 업데이트의 필요성
일회성으로 값을 설정하는 것을 넘어, 매 프레임마다 또는 특정 조건이 충족될 때마다 나이아가라 파라미터를 업데이트해야 하는 경우는 다음과 같습니다.
- 실시간 데이터 반영: 플레이어의 속도, 체력, 총기 잔탄 수 등 게임 내 실시간으로 변하는 데이터를 파티클 효과에 반영하고 싶을 때.
- 지속적인 추적: 파티클이 특정 액터(예: 플레이어, 적)의 위치나 움직임을 지속적으로 추적해야 할 때.
- 환경 반응: 주변 환경(예: 바람의 방향과 세기, 지면의 색상)에 따라 파티클 효과가 변화해야 할 때.
- 애니메이션 동기화: 캐릭터의 애니메이션 진행도에 맞춰 파티클 효과가 동기화되어야 할 때.
동적 파라미터 업데이트의 핵심
블루프린트에서 나이아가라 파라미터를 동적으로 업데이트하는 가장 일반적인 방법은 Event Tick
이벤트나 특정 업데이트 루프 내에서 Set Niagara Variable
노드를 사용하는 것입니다.
나이아가라 시스템 준비 (사용자 변수 노출)
블루프린트에서 동적으로 업데이트할 파라미터는 반드시 나이아가라 시스템 내에서 사용자 변수(User Parameter) 로 노출되어 있어야 합니다.
나이아가라 시스템 에디터를 엽니다.
Parameters
패널에서 User
섹션을 찾습니다.
+
버튼을 클릭하고 Add User Parameter
에서 원하는 타입(예: Float
, Vector
, Color
, Actor
)을 선택하여 새 사용자 변수를 만듭니다. (예: User.TargetLocation
, User.PlayerSpeed
, User.CurrentHealth
)
이 사용자 변수를 드래그하여 이미터나 파티클 모듈의 해당 입력 핀에 연결합니다.
- 예시: 파티클의 이동 속도를 플레이어 속도에 맞춰 조절하고 싶다면,
Add Velocity
모듈의Velocity
입력에User.PlayerSpeed
변수를 곱하는 노드를 연결합니다. - 예시: 파티클이 특정 대상의 위치를 따라가게 하고 싶다면,
Attract Force
모듈의Target Location
입력에User.TargetLocation
을 연결합니다.
Event Tick
을 이용한 업데이트
나이아가라 시스템 컴포넌트가 추가된 블루프린트 (예: 캐릭터 블루프린트)를 엽니다.
Event Graph
탭으로 이동합니다.
Event Tick
노드를 찾습니다. (Event Tick
은 매 프레임마다 실행됩니다.)
Event Tick
에서 실행 핀을 연결하여 다음 노드를 추가합니다.
Niagara Particle System
컴포넌트의 레퍼런스를 가져옵니다.Set Niagara Variable
노드를 검색하여 추가합니다. (예:Set Niagara Variable Float
,Set Niagara Variable Vector
,Set Niagara Variable Object
등, 노출시킨 사용자 변수의 타입에 맞춰 선택).Variable Name
입력에 나이아가라 시스템에서 노출시킨 사용자 변수의 정확한 이름을 입력합니다. (예:User.TargetLocation
,User.PlayerSpeed
)In Value
입력에 동적으로 업데이트할 값을 연결합니다. 이 값은 블루프린트 내의 다른 변수, 함수 반환 값, 또는 다른 액터의 속성에서 가져올 수 있습니다.
직접 해보기: 속도에 따라 파티클 크기 조절하기
플레이어 캐릭터의 이동 속도에 비례하여 발밑에서 발생하는 먼지 파티클의 크기가 커지도록 만들어 보겠습니다.
나이아가라 시스템 준비
새로운 나이아가라 시스템 (New system from selected emitters
> Fountain
)을 생성하고 NS_SpeedDust
라고 이름을 지정합니다.
Initialize Particle
모듈
Lifetime
:0.5
~1.0
(Random Float)Sprite Size
:5.0
(임시로 작은 기본 크기)Color
: 밝은 갈색 또는 회색
Add Velocity
모듈
- Z축
Velocity
를20.0
정도로 낮게 설정하여 살짝 떠오르게 합니다. - X, Y축도
-10.0
~10.0
정도로 작게 설정하여 미세하게 퍼지도록 합니다.
Add Gravity Force
: 필요하다면 제거하거나 Gravity
값을 낮춰 연기가 천천히 퍼지도록 합니다.
Sprite Renderer
- 적절한 연기 또는 먼지 텍스처를 가진
Translucent
머티리얼을 할당합니다. (예:M_Smoke_SubUV
) Soft Particle
을 활성화합니다.
사용자 변수 노출
Parameters
패널의User
섹션에서+
버튼을 클릭하고Add User Parameter
>Float
를 선택하여User.PlayerSpeed
라는 이름의 사용자 변수를 만듭니다. 기본값은1.0
으로 설정합니다.
파티클 크기 제어
Particle Update
섹션에Scale Sprite Size
모듈을 추가합니다.Scale Factor
의Uniform
입력 핀에 다음 노드를 연결합니다.Get Parameter
노드 (Parameter:User.PlayerSpeed
)Multiply
(Float * Float) 노드 (두 번째 입력은0.1
이나0.2
와 같이 작은 값으로 설정하여 속도를 크기로 스케일링)- 이
Multiply
노드의 결과를Scale Sprite Size
의Uniform
입력에 연결합니다. 이렇게 하면User.PlayerSpeed
값에 따라 파티클의 크기가 조절됩니다.
나이아가라 시스템을 저장합니다.
캐릭터 블루프린트 설정
언리얼 엔진의 기본 캐릭터 블루프린트 (BP_ThirdPersonCharacter
또는 여러분의 플레이어 캐릭터 블루프린트)를 엽니다.
Niagara Particle System
컴포넌트 추가
Components
패널에서Niagara Particle System
컴포넌트를 추가하고,Niagara System
속성에 위에서 만든NS_SpeedDust
를 할당합니다.- 컴포넌트를 드래그하여
Mesh
컴포넌트의 자식으로 만들고,Parent Socket
에foot_l
또는foot_r
과 같은 발 소켓을 할당합니다.Location
과Rotation
오프셋을 조절하여 발밑에 오도록 합니다.
Event Graph
로직 구현
Event Tick
노드에서 실행 핀을 연결하여 다음 노드를 추가합니다.Get Velocity
노드 (캐릭터의 속도 벡터를 가져옴)Vector Length
노드 (속도 벡터의 크기를 가져와 현재 속도를Float
로 얻음)Map Range Clamped
노드 (속도 값을 원하는 범위로 매핑합니다)In Range A
:0.0
(최소 속도)In Range B
:600.0
(캐릭터의 최대 이동 속도, 프로젝트 설정에서Max Walk Speed
확인)Out Range A
:0.0
(파티클 크기의 최소 스케일)Out Range B
:10.0
(파티클 크기의 최대 스케일, 나이아가라에서 설정한Multiply
값과 연계)
Niagara Particle System
컴포넌트의 레퍼런스에서Set Niagara Variable Float
노드를 추가합니다.Variable Name
에User.PlayerSpeed
를 정확히 입력합니다.In Value
에Map Range Clamped
노드의 결과를 연결합니다.
- 활성화/비활성화 로직: 캐릭터가 움직이지 않을 때는 파티클 시스템을 비활성화하는 로직을 추가하는 것이 좋습니다.
Vector Length
노드의 결과(Player Speed
)가5.0
(아주 작은 속도 임계값)보다 큰지>
노드로 검사합니다.- 이 결과를
Branch
노드의Condition
에 연결합니다. Branch
노드의True
핀에서는Niagara Particle System
컴포넌트의Activate
노드를 연결합니다.Branch
노드의False
핀에서는Niagara Particle System
컴포넌트의Deactivate
노드를 연결합니다.
블루프린트를 컴파일하고 저장한 후, 게임을 플레이하여 캐릭터를 움직여 봅니다. 캐릭터가 빠르게 움직일수록 발밑 먼지 파티클의 크기가 커지는 것을 확인할 수 있을 겁니다.
고급 동적 파라미터 업데이트 기법
Niagara Data Interface
활용: 특정 액터의 위치, 스켈레탈 메시의 본 정보, 이미지 샘플링 데이터 등을 나이아가라 시스템으로 직접 스트리밍하는Niagara Data Interface
를 활용하면 블루프린트의Event Tick
루프를 거치지 않고도 동적으로 데이터를 업데이트할 수 있어 더욱 효율적입니다.- 예시:
Niagara Data Interface Actor
를 사용하여 파티클이 특정 타겟 액터를 따라가게 하거나,Niagara Data Interface Static Mesh
를 사용하여 메시의 표면에서 파티클을 스폰하게 할 수 있습니다.
- 예시:
- 이벤트 기반 업데이트: 모든 것을
Event Tick
에서 처리하기보다는, 특정 이벤트(예:OnTakeDamage
,OnHit
)가 발생했을 때만 파티클 파라미터를 업데이트하도록 로직을 구성하여 성능을 최적화할 수 있습니다. - 비동기 업데이트: 매우 복잡한 계산이 필요하거나 많은 데이터를 전송해야 할 경우,
Async Task
또는Timer
를 사용하여 매 프레임이 아닌 일정 시간 간격으로 데이터를 업데이트함으로써 메인 스레드의 부담을 줄일 수 있습니다.
동적 파라미터 업데이트는 나이아가라 시스템에 생명을 불어넣어 게임 플레이에 실시간으로 반응하게 하는 핵심적인 기술입니다. Event Tick
과 Set Niagara Variable
노드의 기본적인 활용부터 Niagara Data Interface
를 통한 고급 연동까지 익힌다면, 여러분은 언리얼 엔진에서 상상하는 모든 종류의 동적인 시각 효과를 구현할 수 있는 강력한 능력을 갖추게 될 것입니다.