본문으로 건너뛰기

안동민 개발노트

본문 시작

블루프린트 제어

블루프린트에서 Niagara Component를 생성·활성화하고 사용자 변수·이벤트·Parameter Collection으로 효과를 제어합니다.

나이아가라 파티클 시스템은 블루프린트(Blueprint)와 연동해 게임 로직, 플레이어 입력, 환경 변화에 따라 파티클 효과를 제어할 수 있습니다.

스폰뿐 아니라 속성 변경, 이벤트 트리거, 시스템 활성화/비활성화에도 사용할 수 있습니다.

이 절에서는 나이아가라 시스템을 블루프린트에서 생성하고, 기본적인 속성을 제어하며, 이벤트를 활용하는 방법에 대해 알아보겠습니다.

Blueprint 이벤트는 Niagara 상태와 수명주기를 함께 제어한다

게임 이벤트를 받은 Blueprint가 User Parameter와 Activate·Deactivate를 나눠 호출하면 제어 흐름이 선명해진다.

  1. 1
    반복 재생

    기존 Component를 참조하고 User 값을 먼저 쓴 뒤 Activate한다.

  2. 2
    일회성 효과

    Spawn System으로 만들고 Auto Destroy 또는 Pooling 정책을 함께 둔다.


나이아가라 시스템 컴포넌트 추가

블루프린트에서 나이아가라 시스템을 제어하는 가장 기본적인 방법은 나이아가라 시스템을 블루프린트 액터에 컴포넌트(Component)로 추가하는 것입니다.

블루프린트 생성 또는 열기
  • 새로운 Actor 블루프린트를 생성합니다. (예: BP_NiagaraController)
  • 또는 기존 캐릭터, 무기 등의 블루프린트를 엽니다.
Niagara Particle System 컴포넌트 추가
  • 블루프린트 에디터의 Components 패널에서 Add 버튼을 클릭합니다.
  • 검색창에 Niagara를 입력하고 Niagara Particle System 컴포넌트를 선택하여 추가합니다.
나이아가라 시스템 할당
  • 새로 추가된 Niagara Particle System 컴포넌트를 선택합니다.
  • Details 패널에서 Niagara 섹션의 Niagara System 속성을 찾습니다.
  • 사용할 나이아가라 시스템 에셋(예: NS_BasicSpawn 또는 이전에 만든 다른 시스템)을 드롭다운 메뉴에서 선택하거나, 콘텐츠 브라우저에서 드래그하여 할당합니다.
위치 및 부착 설정 (선택 사항)
  • Niagara Particle System 컴포넌트를 드래그하여 다른 컴포넌트(예: Static Mesh Component 또는 Skeletal Mesh Component)의 자식으로 만들면 해당 컴포넌트에 부착됩니다.
  • Details 패널에서 Transform 섹션의 Location, Rotation, Scale을 조절하여 파티클 시스템의 상대적인 위치를 조정할 수 있습니다.
  • 스켈레탈 메시에 부착할 경우, Parent Socket 속성을 통해 특정 본이나 소켓에 부착할 수 있습니다.

나이아가라 시스템 제어

가장 흔하게 사용되는 제어 방식은 파티클 시스템을 켜고 끄는 것입니다.

  • Activate 노드: 파티클 시스템을 활성화합니다. 시스템이 재생을 시작합니다.
  • Deactivate 노드: 파티클 시스템을 비활성화하고, 현재 활성화된 모든 파티클을 소멸시킵니다.
  • Set Auto Activate 노드: 블루프린트가 스폰될 때 시스템이 자동으로 활성화될지 여부를 설정합니다.
  • Is Active 노드: 현재 시스템이 활성화 상태인지 Bool 값을 반환합니다.
값의 소유 범위와 수명이 Niagara 제어 API를 결정한다

한 Component의 상태인지, 일회성 인스턴스인지, 여러 시스템의 공통값인지부터 구분한다.

  1. 기존 Component

    Set User.* → Activate / Deactivate 지속 오라·엔진 불꽃처럼 한 Actor가 반복 재생한다.

  2. 새 일회성 인스턴스

    Spawn at Location / Spawn Attached 피격·폭발처럼 생성 위치와 종료 정책이 한 번 정해진다.

  3. 여러 시스템의 공통 상태

    Parameter Collection → Shared Read 바람·시간대·전역 강도처럼 월드 범위에서 함께 읽는다.

선택 질문기존 Component일회성 SpawnParameter Collection
범위한 인스턴스새 인스턴스 하나여러 시스템
수명지속·반복짧고 일회성월드 상태
갱신값 변경 시 Set생성 전 초기화공통값 변경 시
종료Deactivate 상태 확인Auto Destroy·Pool소유 월드가 관리

직접 해보기: 버튼을 눌러 파티클 켜고 끄기

새로운 Actor 블루프린트 (BP_ToggleNiagara)를 만들고 나이아가라 시스템 컴포넌트를 추가한 뒤, 키 입력을 받아 시스템을 켜고 끄는 로직을 구현해 보겠습니다.

새로운 Actor 블루프린트 BP_ToggleNiagara를 생성합니다.

Components 패널에서 Niagara Particle System 컴포넌트를 추가하고, Niagara System 속성에 NS_BasicSpawn 또는 원하는 나이아가라 시스템을 할당합니다.

Event Graph 탭으로 이동합니다.

Event Begin Play 노드에서 Niagara Particle System 컴포넌트의 레퍼런스를 가져와 Deactivate 노드를 연결하여 게임 시작 시 파티클 시스템을 비활성화합니다.

빈 공간에 우클릭하고 Keyboard Events에서 원하는 키(예: E 키)를 검색하여 E 키 이벤트 노드를 추가합니다.

E 키 이벤트 노드의 Pressed 핀에서 Niagara Particle System 컴포넌트의 레퍼런스를 가져와 Is Active 노드를 연결합니다.

Is Active 노드의 Return Value에서 Branch 노드를 연결합니다.

Branch 노드의 True 핀에서는 Niagara Particle System 컴포넌트 레퍼런스에서 Deactivate 노드를 연결합니다.

Branch 노드의 False 핀에서는 Niagara Particle System 컴포넌트 레퍼런스에서 Activate 노드를 연결합니다.

블루프린트를 컴파일하고 저장한 후, 레벨에 BP_ToggleNiagara 액터를 배치합니다.

게임을 플레이하여 E 키를 누르면 파티클 시스템이 켜지고, 다시 누르면 꺼지는 것을 확인할 수 있습니다.


나이아가라 시스템의 사용자 변수 제어

Niagara Component는 생성부터 회수까지 하나의 수명주기를 가진다

위치·부착·초기값·활성화·종료 정책을 같은 이벤트 흐름에 묶어야 엉뚱한 위치와 컴포넌트 누적을 막을 수 있다.

  1. 1
    Spawn / Attach

    Location·Socket·Local/World Space를 고정한다.

  2. 2
    Set User.*

    름과 타입이 같은 초기값을 활성화 전에 기록한다.

  3. 3
    Activate

    Component Lifetime과 Auto Activate 정책을 확인한다.

  4. 4
    Update

    값이 바뀔 때만 Parameter를 갱신한다.

  5. 5
    Deactivate

    잔존 파티클·Inactive Response를 확인한다.

  6. 6
    Cleanup

    Auto Destroy 또는 Pool 반환으로 누적을 막는다.

문제 신호끊긴 구간먼저 확인할 것
엉뚱한 위치에서 생성Spawn / AttachTransform·Socket·Space
값이 기본값으로 남음Set User.*User.* 이름·타입·호출 시점
켜지지 않거나 계속 남음Activate / DeactivateAuto Activate·Inactive Response
Component가 누적됨CleanupAuto Destroy·Pooling·참조 해제

나이아가라 시스템 내부에 사용자 변수(User Variables)를 노출시켜 블루프린트에서 이를 직접 제어할 수 있습니다.

이는 파티클의 스폰율, 색상, 크기, 힘의 강도 등 거의 모든 속성을 동적으로 변경할 때 사용됩니다.

나이아가라 시스템에서 사용자 변수 노출

나이아가라 시스템 에디터를 엽니다.

Parameters 패널에서 User 섹션을 찾습니다.

+ 버튼을 클릭하고 Add User Parameter에서 원하는 타입(예: Float, Vector, Color)을 선택하여 새 사용자 변수를 만듭니다. (예: User.SpawnRateMultiplier, User.ImpactColor)

새로 생성된 사용자 변수를 드래그하여 이미터의 해당 속성 입력 핀에 연결합니다.

  • 예시: Spawn Rate 모듈의 Spawn Rate 입력에 User.SpawnRateMultiplier를 연결합니다.

연결된 사용자 변수의 기본값을 설정합니다.

블루프린트에서 사용자 변수 설정

블루프린트 에디터의 Event Graph로 돌아갑니다.

Niagara Particle System 컴포넌트의 레퍼런스를 가져옵니다.

Set Niagara Variable 노드를 검색하여 추가합니다. (예: Set Niagara Variable Float, Set Niagara Variable Vector)

Variable Name 입력에 나이아가라 시스템에서 노출시킨 사용자 변수의 정확한 이름을 입력합니다. (예: User.SpawnRateMultiplier)

In Value 입력에 원하는 값을 연결합니다.

직접 해보기: 스폰율을 동적으로 조절하기

위에서 만든 BP_ToggleNiagara 블루프린트에 스폰율 조절 기능을 추가해 보겠습니다.

NS_BasicSpawn 나이아가라 시스템을 엽니다.

Parameters 패널User 섹션에서 + 버튼을 클릭하고 Add User Parameter > Float를 선택하여 User.SpawnRateMultiplier라는 이름의 사용자 변수를 만듭니다.

기본값은 1.0으로 설정합니다.

Emitter Update 섹션의 Spawn Rate 모듈을 선택합니다.

Spawn Rate 입력 옆의 드롭다운을 클릭하고 Float from Niagara Parameter를 선택하여 User.SpawnRateMultiplier를 연결합니다.

나이아가라 시스템을 저장합니다.

BP_ToggleNiagara 블루프린트 에디터로 돌아갑니다.

E 키 이벤트의 Activate 노드 뒤에 Delay 노드를 연결하고 Duration0.5초 정도로 설정합니다.

Delay 노드 뒤에 Niagara Particle System 컴포넌트 레퍼런스에서 Set Niagara Variable Float 노드를 추가합니다.

Variable NameUser.SpawnRateMultiplier를 정확히 입력합니다.

In Value500.0과 같은 높은 값을 연결합니다.

Set Niagara Variable Float 노드 뒤에 또 다른 Delay 노드를 연결하고 Duration1.0초 정도로 설정합니다.

Delay 노드 뒤에 다시 Set Niagara Variable Float 노드를 추가하고 Variable Name은 동일하게 User.SpawnRateMultiplier, In Value100.0과 같은 기본 값으로 설정합니다.

컴파일하고 저장한 뒤 게임을 플레이합니다.

E 키를 누르면 파티클이 처음에는 폭발하듯이 많이 나왔다가, 잠시 후 정상적인 스폰율로 돌아오는 것을 확인할 수 있습니다.


나이아가라 이벤트 활용

블루프린트에서 나이아가라로 가는 제어 채널

블루프린트 입력이 모든 경우에 같은 경로로 들어가지는 않는다. 단일 컴포넌트 값, 전역 파라미터, 이벤트성 트리거를 구분한다.

  1. User Parameter가 기본 후보

    스폰율 조정 User Parameter가 기본 후보 특정 Niagara Component의 SpawnRate나 Color를 블루프린트에서 직접 바꾼다. Set Niagara Variable

  2. Parameter Collection 후보

    날씨 전역값 Parameter Collection 후보 비, 바람, 시간대처럼 여러 시스템이 공유하는 값을 한곳에서 바꾼다. global value

  3. Event 또는 Blueprint 호출 후보

    충돌 순간 Event 또는 Blueprint 호출 후보 한 번 발생한 충돌, 폭발, 발사 같은 순간 반응을 트리거한다. one shot

  4. 파라미터로 남기는 편이 안전

    상태 유지 파라미터로 남기는 편이 안전 계속 유지되어야 하는 색상, 강도, 크기는 이벤트보다 변수로 관리한다. stateful

나이아가라 이벤트는 블루프린트와 나이아가라 시스템 간에 데이터를 주고받는 강력한 메커니즘입니다.

블루프린트에서 특정 이벤트(예: 플레이어 피격)를 발생시키고, 나이아가라 시스템이 이 이벤트를 감지하여 파티클을 스폰하거나 속성을 변경하게 할 수 있습니다.

블루프린트에서 이벤트 발송

블루프린트에서 나이아가라 이벤트를 발생시키려면 Spawn System at Location 또는 Spawn System Attached 노드를 사용하며, 이때 Spawn System 노드의 Parameters 핀에 데이터를 전달할 수 있습니다.

예시
  • Spawn System at Location 노드를 사용하여 파티클 시스템을 스폰합니다.
  • Location 핀에 원하는 월드 위치를 연결합니다.
  • Niagara System 핀에 스폰할 나이아가라 시스템 에셋을 할당합니다.
  • Parameters 핀에서 Make Niagara System Spawn Info 구조체를 만들고, 여기에 특정 이름의 변수(예: MyImpactPower)를 추가하여 값을 전달합니다.

나이아가라 시스템에서 이벤트 수신

나이아가라 시스템은 블루프린트에서 보낸 이벤트를 Event Handler 모듈을 통해 수신합니다.

나이아가라 시스템 에디터에서 이미터의 Event Handlers 섹션으로 이동합니다.

+ 버튼을 클릭하고 Add Event Handler를 선택합니다.

Event Handler 모듈을 선택하고 Details 패널에서 Source 섹션의 Source 속성을 Blueprint로 설정합니다.

Source Event Name에 블루프린트에서 보낸 이벤트 변수의 정확한 이름을 입력합니다. (예: MyImpactPower)

Actions 섹션에서 Add Action을 클릭하고 Spawn Particles를 선택합니다. (이벤트가 발생할 때 파티클을 스폰)

Spawn Particles 액션의 Spawn Count나 다른 속성을 Event Handler의 출력 핀(예: Payload.Float.MyImpactPower)과 연동하여 블루프린트에서 전달된 값에 따라 파티클을 다르게 스폰하게 할 수 있습니다.


나이아가라 파라미터 컬렉션 (Niagara Parameter Collection)

여러 나이아가라 시스템에 공통으로 적용해야 하는 값(예: 전역 바람 세기, 전투 위험도, 월드 온도)은 각 시스템의 User Parameter를 개별 업데이트하기보다 Niagara Parameter Collection(NPC)으로 중앙 관리하는 편이 효율적입니다.

런타임 제어 흐름

  1. NPC_GlobalFX 컬렉션에 WindStrength, DangerLevel 같은 파라미터를 정의합니다.
  2. 나이아가라 시스템/이미터에서 해당 파라미터를 참조해 스폰율, 속도, 색상 등에 반영합니다.
  3. 블루프린트(예: BP_GameState)에서 게임 상태 변화 시 컬렉션 값을 갱신합니다.
  4. 컬렉션 값을 참조하는 모든 시스템이 자동으로 업데이트됩니다.
BP_GameState (런타임 값 계산)
  -> Set Niagara Parameter Collection Float (NPC_GlobalFX.WindStrength)
  -> Niagara Systems read NPC value
  -> Spawn Rate / Velocity / Color 동시 반영
실전 팁
  • 글로벌 변수만 컬렉션에 두고, 개별 이펙트 차이는 User Parameter로 분리합니다.
  • 컬렉션 파라미터 이름 규칙(Global.*)을 정해 프로젝트 전반에서 일관성 있게 관리합니다.
  • 틱마다 무조건 갱신하지 말고 값이 변한 프레임에만 업데이트해 비용을 줄입니다.

블루프린트 제어는 값을 어디에 저장하고 언제 갱신할지 정하는 문제이므로, 컴포넌트 상태, 개별 사용자 변수, 순간 이벤트 페이로드, 전역 컬렉션을 레이어별로 분리하면 그래프가 커져도 추적하기 쉽습니다.

블루프린트 제어 레이어 지도

나이아가라를 블루프린트에서 다룰 때는 재생 상태, 개별 입력값, 순간 이벤트, 전역 환경값을 서로 다른 레이어에 두어야 그래프가 길어져도 추적이 쉽습니다.

  1. 제어 레이어

    layers Activate 와 Deactivate 는 재생 여부만 담당하게 두면 토글 로직이 단순해집니다. 스폰율, 색상, 반경처럼 한 시스템의 표현만 바꾸는 값을 전달합니다. 피격 위치와 충격량처럼 순간적으로 소비되는 데이터를 실어 보냅니다. 바람, 위험도, 환경 온도처럼 여러 시스템이 공유하는 값은 NPC에 둡니다.

  2. State

    Activate 와 Deactivate 는 재생 여부만 담당하게 두면 토글 로직이 단순해집니다.

  3. User Parameter

    스폰율, 색상, 반경처럼 한 시스템의 표현만 바꾸는 값을 전달합니다.

  4. Event Payload

    피격 위치와 충격량처럼 순간적으로 소비되는 데이터를 실어 보냅니다.

  5. Collection

    바람, 위험도, 환경 온도처럼 여러 시스템이 공유하는 값은 NPC에 둡니다.

  6. 갱신 타이밍

    when 상황 상태 User.* 이벤트 NPC Begin Play Auto Activate 설정 초기 색과 크기 사용하지 않음 월드 기본값 Input 토글과 재생 강도 보정 필요 시 burst 드물게 사용 Hit / Notify 짧게 활성화 접촉 강도 위치와 normal 전달 공통 상태 읽기 State Change 필요 효과 전환 캐릭터별 값 알림성 데이터 변경 프레임만 갱신


고급 설계: Emitter와 System의 책임 분리

복잡한 VFX를 안정적으로 확장하려면 어디까지를 이미터가, 어디부터를 시스템이 담당하는지를 먼저 정해야 합니다.

  • Emitter 책임: 단일 파티클 동작 규칙(스폰/업데이트/렌더러/로컬 파라미터)을 캡슐화합니다.
  • System 책임: 여러 이미터를 조합하고 타이밍, 이벤트 라우팅, 외부 입력(블루프린트/NPC)을 통합합니다.
  • 운영 원칙: 재사용 가능한 로직은 Emitter로, 씬/연출 의존 조합은 System으로 둡니다.

이 원칙을 지키면 같은 불꽃 이미터를 여러 무기 시스템에서 재사용하거나, 시네마틱 전용 연출만 시스템 레이어에서 교체하는 작업이 훨씬 쉬워집니다.

아래 보드는 Emitter, System, Blueprint, Collection 사이의 책임 경계를 다시 정리한 것입니다.

Emitter와 System 책임 경계

블루프린트 제어가 커질수록 효과 로직을 어디에 둘지 먼저 정해야 합니다. 이 경계를 잡아두면 같은 이미터를 여러 시스템에서 재사용하기 쉽습니다.

  1. Emitter
    파티클 규칙

    Emitter Spawn, Initialize, Update, Renderer처럼 한 종류의 파티클이 매 프레임 어떻게 움직이는지를 캡슐화합니다.

  2. System
    연출 조합

    System 여러 이미터의 타이밍, 발동 순서, User Parameter 연결을 묶어 하나의 FX 에셋으로 관리합니다.

  3. Blueprint
    게임 상태

    Blueprint 입력, 피격, 스킬 발동, 위치 계산처럼 게임 로직에서 나온 값을 시스템에 전달합니다.

  4. Collection
    전역 환경

    Collection 바람, 위험도, 시간대처럼 여러 시스템이 공유하는 값은 Niagara Parameter Collection에 둡니다.

  5. User.*
    개별 시스템 입력

    User.* 예시 User.Power , User.Color 소유 System 단위로 값이 다를 때

  6. Event
    순간 페이로드

    Event 예시 Hit Location, Impact Strength 소유 발생 프레임에만 소비할 때

  7. NPC
    공통 파라미터

    NPC 예시 Wind Strength, Danger Level 소유 여러 효과가 같은 값을 읽을 때

블루프린트 제어는 컴포넌트 생성, 재생 제어, 변수 전달, 이벤트 전달을 분리하면 문제 위치가 빨리 보입니다.

Blueprint 제어 연결 흐름

블루프린트에서는 Niagara Component를 만들고 Activate, Set Variable, Event 전달을 상황별로 나눠 써야 제어가 깔끔합니다.

  1. 1
    생성/부착

    Create Spawn System Attached 또는 Niagara Component로 위치와 소켓 기준을 정합니다.

  2. 2
    재생 제어

    Play Activate, Deactivate, Reset System으로 켜고 끄는 시점을 분리합니다.

  3. 3
    변수 전달

    User User.SpawnRate 같은 노출 변수를 Set Niagara Variable로 갱신합니다.

  4. 4
    이벤트

    Event 게임 이벤트를 나이아가라 이벤트나 파라미터 변경으로 변환합니다.

  5. 5
    변수 이름

    User 네임스페이스와 블루프린트 변수명이 정확히 일치하는지 봅니다.

  6. 6
    타이밍

    Activate 전에 필요한 기본값이 먼저 들어가는지 확인합니다.

  7. 7
    책임

    Emitter는 표현, Blueprint는 게임 조건 판단을 맡도록 나눕니다.


블루프린트 연동을 사용하면 나이아가라 시스템의 활성화, 사용자 변수, 이벤트 통신을 게임플레이 상태와 연결할 수 있습니다.

플레이어 행동이나 환경 변화에 반응해야 하는 효과라면 호출 위치와 변수 갱신 주기를 함께 정해야 합니다.

블루프린트 제어는 데이터 입력, 이미터 책임, 렌더 비용, 재현 기준으로 점검합니다.