이벤트 기반 파티클 스폰
이전 절에서 우리는 블루프린트에서 나이아가라 시스템의 파라미터를 동적으로 업데이트하는 방법을 배웠습니다. 이제는 나이아가라 시스템과 블루프린트 간의 또 다른 강력한 상호작용 방식인 이벤트 기반 파티클 스폰(Event-Driven Particle Spawn) 에 대해 알아보겠습니다. 이 방식은 게임 플레이 중 특정 이벤트(예: 캐릭터 피격, 아이템 획득, 발사체 충돌)가 발생했을 때만 파티클 효과를 즉시 스폰하고, 심지어 해당 이벤트와 관련된 데이터(예: 충격 강도, 충돌 위치)를 파티클 시스템에 전달하는 데 사용됩니다.
이벤트 기반 스폰은 불필요한 파티클 시스템의 상시 활성화를 방지하고, 필요한 시점에 정확한 위치와 속성으로 효과를 발생시켜 성능 효율성을 높이는 동시에 더욱 역동적인 시각 효과를 구현할 수 있게 해줍니다.
왜 이벤트 기반 스폰을 사용해야 할까요?
- 성능 최적화: 많은 파티클 시스템은 상시 활성화되어 있을 필요가 없습니다. 이벤트가 발생할 때만 짧게 스폰되고 사라지는 효과(예: 총알 자국, 스파크, 피격 이펙트)에 적합합니다. 시스템을 미리 만들어 두지만, 실제로 필요한 순간에만 생성되므로 자원 낭비를 줄입니다.
- 정확한 위치 및 타이밍: 게임 로직의 특정 지점에서 정확한 위치(예: 총알이 맞은 벽의 지점)에 효과를 스폰할 수 있습니다.
- 동적 데이터 전달: 이벤트 발생 시점의 게임 데이터를 파티클 시스템으로 전달하여, 효과의 속성(크기, 색상, 강도)을 해당 데이터에 따라 동적으로 변경할 수 있습니다.
이벤트 기반 스폰의 핵심
블루프린트에서 나이아가라 파티클 시스템을 이벤트 기반으로 스폰하는 가장 일반적인 방법은 다음과 같은 노드를 사용하는 것입니다.
Spawn System at Location
: 특정 월드 위치에 나이아가라 시스템을 한 번 스폰합니다. 스폰된 시스템은 월드에 독립적으로 존재하며 지정된 수명 동안 재생됩니다.- 주요 입력:
Niagara System
(스폰할 나이아가라 시스템 에셋),Location
(월드 위치),Rotation
(월드 회전),Scale
(스폰되는 시스템의 스케일),Parameters
(가장 중요, 나이아가라 시스템에 전달할 사용자 데이터).
- 주요 입력:
Spawn System Attached
: 특정 컴포넌트나 액터에 나이아가라 시스템을 스폰하고 부착합니다. 부착된 시스템은 부모의 움직임을 따라갑니다.- 주요 입력:
Niagara System
,Attach To Component
또는Attach To Actor
(부착 대상),Socket Name
(부착할 소켓),Location Type
(상대/월드 위치),Location
,Rotation
,Scale
,Parameters
.
- 주요 입력:
나이아가라 시스템으로 데이터 전달
Spawn System at Location
또는 Spawn System Attached
노드의 Parameters
핀은 블루프린트에서 나이아가라 시스템으로 직접 데이터를 전달하는 통로입니다.
Parameters
핀 활성화: 해당 노드를 선택하고 Details
패널에서 Parameters
핀을 체크하여 활성화합니다.
Make Niagara System Spawn Info
노드: Parameters
핀에서 드래그하여 Make Niagara System Spawn Info
노드를 검색하여 추가합니다.
데이터 추가: Make Niagara System Spawn Info
노드를 선택하고 Details
패널에서 +
버튼을 클릭하여 새로운 변수(예: Float
, Vector
, Color
, Actor
)를 추가합니다. 이 변수들은 나이아가라 시스템의 사용자 변수와 동일한 이름으로 매칭되어야 합니다.
- 변수 이름 규칙: 나이아가라 시스템에서 노출된 사용자 변수의 정확한 이름을 사용해야 합니다. (예:
User.ImpactPower
,User.HitNormal
)
값 연결: 블루프린트의 다른 변수나 함수 결과(예: 충돌 결과의 노멀 벡터, 충격의 강도)를 Make Niagara System Spawn Info
노드의 해당 입력 핀에 연결합니다.
나이아가라 시스템에서 전달된 데이터 수신
블루프린트에서 Spawn System
노드의 Parameters
핀을 통해 전달된 데이터는 나이아가라 시스템에서 사용자 변수(User Parameters) 를 통해 수신됩니다.
나이아가라 시스템 열기: 데이터 수신할 나이아가라 시스템 에디터를 엽니다.
사용자 변수 노출: Parameters
패널의 User
섹션에서 +
버튼을 클릭하고 Add User Parameter
를 선택하여, 블루프린트에서 전달할 데이터의 타입과 정확히 동일한 이름으로 사용자 변수를 만듭니다.
- 예시: 블루프린트에서
Parameters.User.ImpactPower
로Float
값을 보냈다면, 나이아가라에서는User.ImpactPower
라는 이름의Float
사용자 변수를 생성해야 합니다.
사용자 변수 활용: 생성된 사용자 변수를 드래그하여 이미터나 파티클 모듈의 해당 속성 입력 핀에 연결하여, 블루프린트에서 전달된 값에 따라 파티클 효과를 제어합니다.
- 예시:
Initialize Particle
모듈의Sprite Size
에User.ImpactPower
를 곱하여 충격 강도에 따라 파티클 크기를 조절합니다. - 예시:
Add Velocity
모듈에User.HitNormal
을 곱하여 충돌 노멀 방향으로 파티클이 튕겨나가게 합니다.
직접 해보기: 총알 충격 시 효과 스폰 및 조절
총알이 벽에 맞았을 때, 충돌 위치에 스파크 파티클 시스템을 스폰하고, 충격 강도에 따라 스파크의 수가 조절되도록 만들어 보겠습니다.
스파크 나이아가라 시스템 준비
새로운 나이아가라 시스템 (New system from selected emitters
> Fountain
)을 생성하고 NS_ImpactSparks
라고 이름을 지정합니다.
Emitter Update
Spawn Rate
모듈을 제거합니다. (블루프린트에서 스폰될 것이므로)Parameters
패널의User
섹션에서+
버튼을 클릭하고Add User Parameter
>Float
를 선택하여User.ImpactStrength
라는 이름의 사용자 변수를 만듭니다. 기본값은1.0
으로 설정합니다.
Initialize Particle
모듈
Lifetime
:0.2
~0.5
(Random Float) (스파크는 짧게 존재)Sprite Size
:2.0
~5.0
(Random Float)Color
: 밝은 노란색 (R:1, G:0.8, B:0, A:1
)
Add Velocity
모듈
Velocity
를Sphere
형태로 설정하고Radius
를100.0
정도로 설정하여 사방으로 퍼지게 합니다.
Particle Update
섹션
Add Gravity Force
를 추가하여 스파크가 아래로 떨어지게 합니다.Drag
모듈을 추가하고Drag
값을5.0
정도로 높게 설정하여 스파크가 빠르게 멈추도록 합니다.
Sprite Renderer
Material
: 발광하는 스파크 텍스처를 가진Additive
블렌드 모드의Unlit
머티리얼을 할당합니다. (간단히는M_Fire_SubUV
같은 것을 사용할 수 있습니다.)
Spawn Burst Instantaneous
모듈 추가
Emitter Update
섹션에서+
버튼을 클릭하고Spawn Burst Instantaneous
모듈을 추가합니다.Spawn Count
입력 핀에 다음 노드를 연결합니다.Get Parameter
노드 (Parameter:User.ImpactStrength
)Multiply
(Float * Float) 노드 (두 번째 입력에100.0
과 같은 숫자를 연결하여 강도에 따라 스파크 수를 늘림)- 이
Multiply
노드의 결과를Spawn Burst Instantaneous
의Spawn Count
에 연결합니다.
나이아가라 시스템을 저장합니다.
총알 충돌 블루프린트 설정
총알 블루프린트가 없으면, 간단한 Actor
블루프린트를 만들고 Sphere Component
와 Projectile Movement Component
를 추가하여 총알처럼 날아가게 설정합니다.
총알 블루프린트(예: BP_BulletProjectile
)를 엽니다.
총알의 Sphere Component
나 Collision Component
를 선택하고 Details
패널에서 On Component Hit
또는 On Component Begin Overlap
이벤트(Event
버튼 클릭)를 추가합니다.
Event Hit
(또는 Event Overlap
) 노드에서 실행 핀을 연결하여 다음 노드를 추가합니다.
Spawn System at Location
노드를 추가합니다.Niagara System
핀에NS_ImpactSparks
를 할당합니다.Location
핀에Hit
이벤트의Hit Location
(충돌 지점)을 연결합니다.Rotation
핀에Make Rot From Z
노드를 연결하고,Hit
이벤트의Hit Normal
(충돌 표면의 노멀)을Z
입력에 연결하여 스파크가 벽 표면에 수직으로 스폰되도록 합니다.Parameters
핀을 활성화합니다.Parameters
핀에서 드래그하여Make Niagara System Spawn Info
노드를 추가합니다.Make Niagara System Spawn Info
노드를 선택하고Details
패널에서+
버튼을 클릭한 후Add Float
를 선택하여User.ImpactStrength
라는 이름의 변수를 만듭니다.User.ImpactStrength
입력 핀에Hit
이벤트의Impulse
(충격량)나Velocity
(속도)의Vector Length
결과를 연결하여 충격 강도를 전달합니다. 필요하다면Map Range Clamped
노드를 사용하여 값을 적절한 범위로 스케일링합니다.Destroy Actor
노드를 추가하여 총알이 충돌 후 사라지게 합니다.
블루프린트를 컴파일하고 저장한 후, 레벨에 총알 발사 로직을 추가하여 테스트합니다. (예: Event Play
에서 총알을 스폰하여 날아가게 함)
이제 총알이 벽에 부딪힐 때마다 충돌 지점에서 스파크 파티클이 스폰되며, 충돌 강도에 따라 스파크의 양이나 크기가 조절되는 것을 확인할 수 있을 겁니다.
이벤트 기반 파티클 스폰은 언리얼 엔진에서 동적이고 반응적인 시각 효과를 구현하는 데 매우 중요한 기법입니다. 블루프린트에서 적절한 타이밍에 파티클 시스템을 스폰하고, 필요한 데이터를 Parameters
핀을 통해 정확하게 전달함으로써, 여러분의 게임은 훨씬 더 몰입감 있는 시각적 피드백을 제공할 수 있게 될 것입니다.