안동민 개발노트 아이콘

안동민 개발노트

4장 : 데이터와 매개변수

동적 매개변수 시스템의 기초

데이터 인터페이스가 나이아가라 시스템과 외부 세계를 연결하는 큰 다리라면, 동적 매개변수(Dynamic Parameter)는 그 다리 위를 오가는 정보의 흐름을 제어하는 핵심적인 메커니즘입니다. 나이아가라에서 파티클 효과를 실시간으로 제어하고, 게임 플레이 상황에 반응하도록 만드는 데 있어 동적 매개변수는 필수적인 요소입니다.

간단히 말해, 동적 매개변수는 모듈 내에서 직접 값을 고정하는 대신, 외부로부터 값을 받아와 파티클의 속성을 조절할 수 있게 해주는 유연한 시스템입니다. 이는 마치 리모컨으로 TV 볼륨을 조절하듯, 파티클 효과의 다양한 측면을 게임 플레이 중에 변경할 수 있도록 합니다.


동적 매개변수란 무엇인가요?

일반적으로 나이아가라 모듈의 속성(예: Spawn Rate의 스폰 개수, Add Velocity의 속도 값)은 에디터에서 직접 숫자를 입력하여 고정합니다. 하지만 동적 매개변수를 사용하면, 이러한 속성 값들을 게임 내의 다른 변수(예: 플레이어의 현재 체력, 환경의 온도, 시간의 흐름)에 연결하여 실시간으로 변화시킬 수 있습니다.

동적 매개변수를 이해하는 가장 좋은 방법은 입력(Input)출력(Output)의 개념으로 접근하는 것입니다.

  • 모듈의 출력: 각 모듈은 파티클의 속성(위치, 속도, 색상 등)을 계산하고, 그 결과를 다른 모듈이나 렌더러가 사용할 수 있도록 출력합니다. 예를 들어, Initialize Particle 모듈은 파티클의 초기 색상을 출력하고, Scale Color 모듈은 파티클의 수명에 따라 변화된 색상을 출력합니다.
  • 모듈의 입력: 각 모듈은 자신의 기능을 수행하기 위해 입력 값을 필요로 합니다. 이 입력 값은 내부적인 계산 결과일 수도 있고, 다른 모듈의 출력일 수도 있으며, 바로 이 동적 매개변수를 통해 외부에서 받아오는 값일 수도 있습니다.

동적 매개변수 시스템은 이러한 입출력 흐름을 더욱 유연하게 만들어, 특정 파티클 속성을 계산하는 데 필요한 정보가 어디에서 오든 간에 쉽게 연결하고 사용할 수 있도록 합니다.


동적 매개변수의 작동 방식

나이아가라 시스템 내에서 동적 매개변수는 크게 세 가지 레벨에서 정보를 주고받을 수 있습니다.

레벨 맵: 시스템 공유, 모듈 간 전달, 외부 입력 연동은 모두 Dynamic Parameter를 쓰지만 연결 지점과 제어 범위가 서로 다릅니다.

이미터와 시스템 간의 매개변수 공유

하나의 나이아가라 시스템은 여러 이미터를 포함할 수 있습니다. 이때 시스템 레벨에서 정의된 매개변수를 모든 이미터가 공유하거나, 반대로 이미터에서 생성된 특정 데이터를 시스템 레벨로 끌어올려 사용할 수 있습니다.

  • 사용 예시
    • 공통 스케일: 시스템 레벨에서 GlobalScale이라는 매개변수를 정의하고, 각 이미터의 파티클 크기나 속도에 이 값을 곱해주면, 시스템 전체의 크기를 한 번에 조절할 수 있습니다.
    • 총 파티클 수: 각 이미터가 생성하는 파티클 수를 합산하여 시스템 레벨에서 총 파티클 수를 실시간으로 파악할 수 있습니다.

모듈 간의 매개변수 흐름

이것이 나이아가라 동적 매개변수의 가장 기본적인 활용입니다. 스크립트 에디터에서 노드를 연결하듯, 한 모듈의 출력 값을 다른 모듈의 입력 값으로 직접 연결할 수 있습니다.

  • 사용 예시
    • Initialize Particle 모듈에서 설정한 파티클의 초기 Color 값을 Scale Color 모듈의 입력으로 가져와 수명에 따른 색상 변화의 기본 색상으로 활용할 수 있습니다.
    • Collision 모듈이 감지한 충돌 위치를 Spawn Burst 모듈의 스폰 위치 입력으로 사용하여 충돌 지점에 파티클을 생성할 수 있습니다.

외부 데이터 (블루프린트, C++ 등)와의 연동

나이아가라 동적 매개변수의 가장 강력한 활용처 중 하나는 게임의 블루프린트(Blueprint)C++ 코드에서 직접 파티클 시스템의 매개변수를 제어하는 것입니다.

  • 사용 예시
    • 캐릭터 속도에 따른 연기 밀도: 캐릭터의 현재 이동 속도를 블루프린트에서 나이아가라 시스템의 Spawn Rate 모듈로 전달하여, 빠르게 달릴수록 더 많은 먼지나 연기가 나도록 만듭니다.
    • 환경 온도에 따른 불꽃 색상: 게임 월드의 특정 지점 온도를 감지하여 나이아가라 시스템의 Color 매개변수로 전달, 온도가 높을수록 불꽃이 더 밝고 붉게 보이도록 합니다.
    • 체력 기반 효과: 플레이어의 체력이 낮아질수록 캐릭터 주변에 나타나는 파티클의 색상이나 강도를 변화시킵니다.

외부에서 들어온 값은 먼저 어떤 네임스페이스에 둘지 정한 뒤, 모듈 입력을 거쳐 실제 파티클 속성에 반영됩니다. 아래 흐름처럼 값의 소유 범위와 사용 방식을 분리해 생각하면 연결 실수를 줄일 수 있습니다.


동적 매개변수 생성 및 활용

나이아가라에서 동적 매개변수를 만들고 사용하는 과정은 주로 스크립트 에디터디테일 패널에서 이루어집니다.

매개변수 타입 확인: 나이아가라의 모든 파티클 속성은 특정 매개변수 타입(예: Float, Vector3, Color)을 가집니다. 디테일 패널에서 속성 이름 옆에 있는 아이콘을 통해 타입을 확인할 수 있습니다.

드롭다운 메뉴 활용: 대부분의 속성 값은 단순히 숫자를 입력하는 것 외에도 옆에 있는 작은 화살표(드롭다운 메뉴)를 클릭하면 다양한 옵션을 제공합니다.

  • Direct Set: 직접 값을 입력합니다. (기본값)
  • Random Range: 특정 범위 내에서 무작위 값을 사용합니다.
  • From Curve: 시간에 따른 변화를 커브(그래프)로 정의합니다.
  • Link to Emitter/System: 이미터나 시스템 레벨의 다른 매개변수와 연결합니다.
  • Dynamic Input: 스크립트 에디터에서 노드로 연결할 수 있는 입력 핀을 생성합니다. 가장 흔하게 사용하는 방식입니다.
  • Get Niagara Parameter: 다른 모듈이나 시스템 레벨에서 정의된 매개변수 값을 가져옵니다.
  • Set New or Existing Parameter: 특정 매개변수(주로 파티클 속성)의 값을 설정하는 데 사용되는 범용 노드입니다.
예시: Add Velocity에 동적 매개변수 적용

Add Velocity 모듈의 Velocity 속성을 외부에서 제어하고 싶다고 가정해 봅시다.

Add Velocity 모듈의 Velocity 속성 옆 화살표를 클릭합니다.

Dynamic Input을 선택합니다.

그러면 Dynamic Input (Vector)라는 새로운 항목이 생기고, 그 옆에 이름 입력란과 함께 노드처럼 생긴 버튼이 생깁니다.

이름을 CustomVelocity와 같이 지정합니다.

이제 스크립트 에디터에서 CustomVelocity라는 이름의 입력 핀이 활성화됩니다.

이 핀에 다른 모듈의 출력 값을 연결하거나, Make Vector와 같은 노드를 사용하여 직접 값을 입력할 수 있습니다. 또한, 이 CustomVelocity 매개변수는 블루프린트에서 해당 나이아가라 시스템을 선택했을 때 사용자 정의 매개변수 섹션에 나타나, 게임 도중에도 값을 변경할 수 있게 됩니다.


동적 매개변수는 나이아가라 효과에 생명력을 불어넣고, 게임 세계와의 상호작용을 가능하게 하는 강력한 개념입니다. 이 개념을 이해하고 활용하는 것은 단순히 멋진 시각 효과를 만드는 것을 넘어, 게임 플레이와 밀접하게 연동되는 더욱 몰입감 있는 경험을 제공하는 데 필수적입니다.