본문 바로가기

나이아가라 스크립트 기본 개념

노드·매개변수·네임스페이스·데이터 타입으로 Module Script의 입력과 파티클 속성 계산 흐름을 구성합니다.

지금까지 나이아가라의 구성 요소와 데이터 흐름을 익혔다면, 이제 실제 동작 로직을 설계할 단계입니다.

핵심 도구는 나이아가라 스크립트(Niagara Script)입니다.

이 환경에서는 모듈 내부 동작 정의, 파티클 속성 계산, 복잡한 상호작용 구현을 노드 기반으로 처리할 수 있습니다.

코딩 배경이 적더라도 접근할 수 있도록, 나이아가라 스크립트는 언리얼 엔진의 블루프린트와 유사한 시각적 노드 연결 방식으로 동작합니다.

즉 코드를 직접 작성하는 대신, 논리 흐름을 블록처럼 조립해 파티클의 동작을 제어할 수 있습니다.


나이아가라 스크립트란 무엇인가요?

나이아가라 스크립트는 에디터의 스크립트 에디터(Script Editor) 패널에서 작업하는 비주얼 프로그래밍 공간입니다.

Initialize Particle, Add Velocity, Scale Color 같은 기본 모듈도 내부적으로 이 스크립트 구조로 되어 있으며, 사용자 정의 모듈 역시 같은 공간에서 로직을 직접 구현합니다.

나이아가라 스크립트의 핵심 개념은 데이터 흐름(Data Flow)입니다.

각 노드는 특정 연산(예: 더하기, 곱하기, 벡터 생성, 값 가져오기)을 수행하고, 그 결과를 다음 노드로 전달합니다.

이러한 데이터의 흐름은 파티클의 최종 속성을 계산하는 데 사용됩니다.


나이아가라 스크립트의 주요 구성 요소

스크립트 에디터에서 여러분이 다루게 될 주요 구성 요소들은 다음과 같습니다.

노드 (Nodes)

노드는 스크립트를 이루는 가장 기본적인 구성 단위입니다.

각 노드는 특정한 기능이나 연산을 수행합니다.

  • 입력 핀 (Input Pins): 노드의 왼쪽 또는 상단에 위치하며, 다른 노드로부터 데이터를 받거나 직접 값을 입력받습니다.
  • 출력 핀 (Output Pins): 노드의 오른쪽 또는 하단에 위치하며, 노드에서 처리된 결과를 다음 노드로 전달합니다.
  • 연결선 (Wires): 노드의 출력 핀과 다른 노드의 입력 핀을 연결하여 데이터의 흐름을 만듭니다.

매개변수 (Parameters)

매개변수는 파티클이 가지고 있는 속성(예: Particles.Color, Particles.Position, Particles.Velocity)이나 시스템/이미터의 속성(System.Age, Emitter.Age)을 나타냅니다.

  • Map Get: 입력 Parameter Map에서 Particles.Color, Particles.Position 등의 값을 읽습니다.
  • Map Set: 계산한 값을 속성에 기록한 Parameter Map을 다음 노드에 전달합니다.

네임스페이스 (Namespaces)

나이아가라의 매개변수는 체계적인 관리를 위해 네임스페이스를 사용합니다.

이는 매개변수의 출처나 종류를 명확히 구분하는 데 도움을 줍니다.

주요 네임스페이스는 다음과 같습니다.

  • Particles.: 개별 파티클의 속성 (예: Particles.Position, Particles.Color, Particles.Lifetime).
  • System.: 나이아가라 시스템 전체의 속성 (예: System.Age, System.LoopCount).
  • Emitter.: 개별 이미터의 속성 (예: Emitter.Age, Emitter.DistanceTraveled).
  • User.: 외부(블루프린트, C++ 등)에서 전달되는 사용자 정의 매개변수 (예: User.MyCustomValue).
  • Engine.: 언리얼 엔진 자체에서 제공하는 매개변수 (예: Engine.DeltaTime).
  • Local.: 스크립트 내부에서 임시로 사용하는 지역 변수.

네임스페이스를 통해 어떤 매개변수가 어떤 스코프(Scope)에서 정의되고 사용되는지 명확히 알 수 있으며, 같은 이름의 매개변수가 다른 스코프에 있을 때 충돌을 방지합니다.

데이터 타입 (Data Types)

각 매개변수와 핀은 특정 데이터 타입을 가집니다.

올바른 데이터 타입끼리만 연결할 수 있습니다.

  • Float: 소수점을 포함하는 단일 숫자 (예: 1.5, 3.14).
  • Int: 정수 (예: 1, 100).
  • Vector2: 2차원 좌표 (X, Y).
  • Vector3: 3개 성분 (X, Y, Z), 속도나 방향에 사용. 위치는 대규모 월드 좌표를 구분하는 Position 타입을 사용하며 좌표 공간과 변환을 확인합니다.
  • Vector4: 4개 성분 (X, Y, Z, W). Color와 Quaternion은 각각 색상과 회전의 의미를 가진 별도 타입이므로 성분 수만 보고 서로 바꾸지 않습니다.
  • Color: 색상 값 (RGBA).
  • Bool: 참/거짓 논리 값.
  • Enum: 열거형, 미리 정의된 목록 중 하나를 선택하는 타입.

스크립트 에디터에서 작업하기

스크립트 에디터 열기: 스택에서 모듈을 선택하면 입력 설정을 볼 수 있습니다. 내부 그래프는 모듈 헤더를 더블 클릭하거나 해당 스크립트 에셋을 열어 확인합니다. 실습 수정은 공유 엔진 모듈 대신 새 Scratch Pad 모듈에서 진행합니다.

노드 추가: 스크립트 에디터의 빈 공간에서 마우스 오른쪽 버튼을 클릭하면 노드 검색창이 나타납니다.

여기서 원하는 노드를 검색하여 추가할 수 있습니다. (예: Add, Multiply, Sine, Make Vector, Map Get 등)

노드 연결: 노드의 출력 핀을 마우스로 클릭하고 드래그하여 다른 노드의 입력 핀에 연결합니다.

연결선이 나타나며 데이터가 흐르는 것을 시각적으로 보여줍니다.

값 설정: 노드에 직접 값을 입력해야 하는 경우, 해당 노드를 선택하면 디테일 패널에 속성이 나타나 값을 변경할 수 있습니다.


Parameter Map으로 읽기와 쓰기 연결하기

모듈의 기본 연결은 Input Map → Map Set → Output Module입니다. Map Get은 입력 맵에서 필요한 속성을 꺼내고, 연산 노드의 결과를 Map Set의 해당 속성 핀에 연결합니다. 출력 노드는 변경된 맵을 다음 모듈로 넘깁니다.

Parameter Map과 값 계산의 연결

입력 Velocity 100/빨강→Map Get→0.5를 곱해 50 계산→Map Set 기록→뒤 모듈 50/색 유지라는 본문 실제 값 전달 사례이다. 값 계산만으로 쓰기가 일어나지 않음을 드러낸다.

Parameter Map과 값 계산의 연결

NIAGARA · CH5-1

읽어 계산한 값을 변경된 맵에 기록합니다

Parameter Map은 속성 집합을 전달합니다. Map Get이 꺼낸 값은 계산 뒤 Map Set의 속성 입력에 연결하고, 변경된 맵을 다음 모듈로 넘깁니다.

Parameter Map과 값 계산의 연결입력 맵은 Map Set으로 이어지고 Map Get이 읽은 값은 연산 후 Map Set에 기록됩니다. 변경된 맵이 Output Module로 전달됩니다.Input Map맵Map Get속성 읽기연산새 값 계산Map Set맵의 해당 속성에 결과 기록Output Module
Parameter Map과 값 계산의 연결입력 맵은 Map Get과 Map Set에 각각 전달된다. Map Get이 읽은 값은 연산을 거쳐 Map Set에 기록되고, 변경된 맵은 Output Module로 전달된다. 속성 집합인 맵과 계산할 값의 두 입력 경로를 구별하며 실행 핀의 순서가 아니다.Input Map속성 집합Map Get속성 읽기읽은 값연산새 값 계산새 값속성 맵Map Set해당 속성에 기록변경 맵Output Module다음 모듈로 전달

왼쪽 선 · Parameter Map

Input Map을 Map Set에 전달합니다. Map Set은 받은 맵의 해당 속성을 새 값으로 기록합니다.

오른쪽 선 · 계산할 값

Map Get으로 필요한 속성을 읽고 연산한 결과를 Map Set의 해당 속성 핀에 연결합니다.

아래 선 · 변경된 맵

Output Module로 전달해 뒤 모듈이 읽을 수 있게 합니다. 앞뒤 작성자와 Spawn/Update 실행 범위를 함께 확인합니다.

연결선은 데이터 전달입니다. 왼쪽은 속성 집합인 맵, 오른쪽은 읽어 계산한 값이며 Exec/Do 실행 핀이 아닙니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
Map 입력

현재 Velocity 100과 빨강을 읽는다.

  • Velocity: 100
  • Color: 빨강
  • Map Get은 현재 속성을 읽는 동작이다.
계산

0.5를 곱해 50을 만든다.

  • 계산 결과: 50
  • Map 기록: 아직 100
  • 계산만으로는 원래 속성이 자동으로 변경되지 않는다.
Map Set 뒤

50을 기록하면 뒤 모듈이 50을 읽는다.

  • Velocity: 50
  • Color: 빨강 유지
  • 선택 속성 쓰기와 다른 속성 보존을 함께 확인한다.

Parameter Map과 값 계산의 연결

입력 Velocity 100/빨강→Map Get→0.5를 곱해 50 계산→Map Set 기록→뒤 모듈 50/색 유지라는 본문 실제 값 전달 사례이다. 값 계산만으로 쓰기가 일어나지 않음을 드러낸다.

Parameter Map과 값 계산의 연결

NIAGARA · CH5-1

읽어 계산한 값을 변경된 맵에 기록합니다

Parameter Map은 속성 집합을 전달합니다. Map Get이 꺼낸 값은 계산 뒤 Map Set의 속성 입력에 연결하고, 변경된 맵을 다음 모듈로 넘깁니다.

Parameter Map과 값 계산의 연결입력 맵은 Map Set으로 이어지고 Map Get이 읽은 값은 연산 후 Map Set에 기록됩니다. 변경된 맵이 Output Module로 전달됩니다.Input Map맵Map Get속성 읽기연산새 값 계산Map Set맵의 해당 속성에 결과 기록Output Module
Parameter Map과 값 계산의 연결입력 맵은 Map Get과 Map Set에 각각 전달된다. Map Get이 읽은 값은 연산을 거쳐 Map Set에 기록되고, 변경된 맵은 Output Module로 전달된다. 속성 집합인 맵과 계산할 값의 두 입력 경로를 구별하며 실행 핀의 순서가 아니다.Input Map속성 집합Map Get속성 읽기읽은 값연산새 값 계산새 값속성 맵Map Set해당 속성에 기록변경 맵Output Module다음 모듈로 전달

왼쪽 선 · Parameter Map

Input Map을 Map Set에 전달합니다. Map Set은 받은 맵의 해당 속성을 새 값으로 기록합니다.

오른쪽 선 · 계산할 값

Map Get으로 필요한 속성을 읽고 연산한 결과를 Map Set의 해당 속성 핀에 연결합니다.

아래 선 · 변경된 맵

Output Module로 전달해 뒤 모듈이 읽을 수 있게 합니다. 앞뒤 작성자와 Spawn/Update 실행 범위를 함께 확인합니다.

연결선은 데이터 전달입니다. 왼쪽은 속성 집합인 맵, 오른쪽은 읽어 계산한 값이며 Exec/Do 실행 핀이 아닙니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
Map 입력

현재 Velocity 100과 빨강을 읽는다.

  • Velocity: 100
  • Color: 빨강
  • Map Get은 현재 속성을 읽는 동작이다.
계산

0.5를 곱해 50을 만든다.

  • 계산 결과: 50
  • Map 기록: 아직 100
  • 계산만으로는 원래 속성이 자동으로 변경되지 않는다.
Map Set 뒤

50을 기록하면 뒤 모듈이 50을 읽는다.

  • Velocity: 50
  • Color: 빨강 유지
  • 선택 속성 쓰기와 다른 속성 보존을 함께 확인한다.

Parameter Map 선은 속성 집합을 전달합니다. Blueprint의 Exec/Do 실행 핀이 아니며, 모든 Niagara 스크립트가 Evaluate라는 시작 노드를 갖는 것도 아닙니다. 모듈이 놓인 Spawn/Update 단계와 스택의 앞뒤 모듈이 어떤 값을 읽고 쓰는지를 함께 확인합니다.

예시: 한 속성을 읽고 바꾼 뒤 다음 모듈로 전달하기

앞 모듈이 속도 (100, 0, 0) cm/s와 빨간색을 기록했다고 가정합니다. Scratch Pad 모듈의 Map Get에서 속도를 읽고 0.5를 곱하면 (50, 0, 0) cm/s입니다. 이 결과만 Map Set의 속도 입력에 연결하고 입력 맵도 Map Set에 전달합니다. 뒤 모듈이 출력 맵에서 읽는 속도는 (50, 0, 0) cm/s이고, 색상은 이 모듈에서 새로 기록하지 않았으므로 입력 맵의 값을 이어받습니다. Map Get의 값 출력만 계산해 놓고 Map Set에 연결하지 않으면 그 계산이 속도를 갱신한 것으로 볼 수 없습니다.

다음 모듈이 읽을 값 예상하기

입력 속도가 (80, 0, 0) cm/s이고 이 모듈의 배율을 0.25로 바꿨습니다. 색상 입력은 건드리지 않았고 뒤쪽에 속도·색상을 설정하는 다른 모듈도 없습니다. 출력 맵의 속도와 색상은 어떻게 될까요? 같은 모듈을 Update에서 다음 틱에도 실행한다면, 다음 입력은 처음 속도와 직전 출력 중 어느 쪽인지도 설명하세요.

맵과 값의 연결을 따라 풀이하기

속도는 (20, 0, 0) cm/s이고 색상은 입력 맵에서 이어받습니다. 현재 속도를 읽는 Update 모듈이 다음 틱에도 같은 배율을 기록한다면 그때는 직전 속도 (20, 0, 0) cm/s를 읽어 (5, 0, 0) cm/s로 줄입니다. Spawn에 한 번 배치한 모듈은 생성 순간의 속도를 정할 뿐, 이 Update 반복을 자동으로 수행하지 않습니다.

다음 절에서는 이 흐름에 수학 연산을 연결합니다.