PART 6 · 강의 3/3

게임플레이 연동

Niagara Data Channel, Blueprint API, Niagara Component를 활용한 게임 시스템 통합을 학습합니다.

01

Niagara Data Channel

Niagara와 게임 코드 간 데이터 스트림

Niagara Data Channel은 Niagara System, Blueprint, 그리고 다른 Niagara System 간에 데이터를 교환하는 통신 메커니즘입니다. 이벤트 시스템의 한계(CPU 전용, 같은 System 내부)를 극복합니다.

Data Channel 설정
// 1. Data Channel 에셋 생성 콘텐츠 브라우저우클릭Niagara Data Channel DC_ImpactData (Data Channel Asset): { Variables: Position : Vector3 Normal : Vector3 Intensity : float SurfaceType : int32 } // 2. Blueprint에서 Data Channel에 쓰기 UNiagaraDataChannelWriter* Writer = UNiagaraDataChannelLibrary::WriteToDataChannel( WorldContext, DC_ImpactData ); Writer->WriteVector("Position", HitLocation); Writer->WriteVector("Normal", HitNormal); Writer->WriteFloat("Intensity", DamageAmount); // 3. Niagara System에서 Data Channel 읽기 Emitter Update / Particle Spawn: Read from Data Channel { Channel: DC_ImpactData → Position, Normal, Intensity } // 이 데이터를 기반으로 파티클 생성/동작
Data Channel vs Event vs User Parameter

Event: 같은 System 내, CPU Sim 전용. Data Channel: System 간, Blueprint 간, CPU/GPU 모두 지원. User Parameter: 단일 값 전달, Blueprint에서 설정. Data Channel은 프레임마다 다수의 "이벤트"를 전달할 수 있어 이벤트의 상위 호환입니다.

02

Niagara Component API

Blueprint/C++에서 Niagara 제어

주요 Niagara Component 함수
// 이펙트 생성과 제어 UNiagaraComponent* Comp; // 1. 이펙트 생성 (Actor에 부착) Comp = UNiagaraFunctionLibrary::SpawnSystemAttached( NiagaraSystem, // 에셋 RootComponent, // 부착 대상 SocketName, // 소켓 (NAME_None이면 루트) FVector::ZeroVector,// 오프셋 FRotator::ZeroRotator, EAttachLocation::KeepRelativeOffset, true, // Auto Destroy true // Auto Activate ); // 2. 이펙트 생성 (월드에 독립) Comp = UNiagaraFunctionLibrary::SpawnSystemAtLocation( World, NiagaraSystem, Location, Rotation ); // 3. 파라미터 설정 Comp->SetVariableFloat("User.Intensity", 2.0f); Comp->SetVariableVec3("User.TargetPos", Target); Comp->SetVariableLinearColor("User.Color", FLinearColor::Red); // 4. 실행 제어 Comp->Activate(); // 활성화 Comp->Deactivate(); // 비활성화 (기존 파티클 유지) Comp->DeactivateImmediate(); // 즉시 정지 Comp->ReinitializeSystem(); // 리셋 후 재시작 // 5. 상태 확인 bool bActive = Comp->IsActive(); bool bComplete = Comp->IsComplete();
03

이펙트 풀링과 관리

Niagara Component Pool 시스템

빈번하게 생성/소멸되는 이펙트(총알 충돌, 발자국 등)는 매번 새 컴포넌트를 생성하면 비용이 큽니다. Component Pool을 사용하면 재사용으로 비용을 절감합니다.

Niagara Component Pool 설정
// Project Settings → Niagara → Component Pool Enable Pooling: true // SpawnSystemAtLocation에서 자동 풀링 사용 Comp = UNiagaraFunctionLibrary::SpawnSystemAtLocation( World, NiagaraSystem, Location, Rotation, FVector::OneVector, // Scale true, // Auto Destroy (풀에 반환) true, // Auto Activate ENCPoolMethod::AutoRelease // 풀링 모드 ); // Pool Method 옵션: None // 풀링 안 함 AutoRelease // 이펙트 완료 시 자동으로 풀에 반환 ManualRelease // 수동으로 풀에 반환 // 수동 반환 Comp->ReleaseToPool();
풀링 모범 사례

1) 자주 사용하는 이펙트(충격, 발자국 등)는 반드시 풀링을 사용하세요. 2) Loop Behavior가 Once인 이펙트는 AutoRelease가 적합합니다. 3) 루프 이펙트는 ManualRelease를 사용하고 명시적으로 반환하세요.

04

실전 통합 패턴

대미지 시스템, 환경 반응형 이펙트

대미지 시스템과 연동된 VFX
// C++ / Blueprint: 대미지 적중 시 void AMyCharacter::OnHit(FHitResult HitResult, float Damage) { // 1. 임팩트 이펙트 스폰 auto* ImpactFX = SpawnSystemAtLocation( NS_Impact, HitResult.Location, HitResult.Normal.Rotation() ); // 2. 대미지 강도에 따라 이펙트 크기 조절 ImpactFX->SetVariableFloat("User.Intensity", Damage / 100.0f); // 3. 표면 타입에 따라 색상 변경 switch (HitResult.PhysMaterial->SurfaceType) { case Metal: ImpactFX->SetVariableLinearColor( "User.SparkColor", FLinearColor(1, 0.8, 0.3, 1)); break; case Stone: ImpactFX->SetVariableLinearColor( "User.SparkColor", FLinearColor(0.7, 0.6, 0.5, 1)); break; } // 4. Data Channel로 히트 정보 브로드캐스트 // 다른 Niagara System(환경 반응 등)이 수신 가능 WriteToDataChannel(DC_HitEvents, HitResult); }
SUMMARY

핵심 요약

  • Niagara Data Channel은 System 간, Blueprint 간 데이터를 교환하는 범용 통신 메커니즘입니다 (CPU/GPU 모두 지원).
  • Niagara Component API로 Blueprint/C++에서 이펙트를 생성, 파라미터 설정, 실행 제어합니다.
  • SpawnSystemAtLocation/Attached로 이펙트를 월드에 배치하거나 Actor에 부착합니다.
  • Component Pool을 사용하면 빈번한 이펙트 생성/소멸의 비용을 크게 절감합니다.
  • 게임 시스템(대미지, 물리, AI)의 데이터를 User ParameterData Channel로 이펙트에 전달합니다.
  • 표면 타입, 대미지 강도 등에 따른 동적 이펙트 변형이 게임 품질의 핵심입니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 블루프린트에서 Niagara 제어

블루프린트에서 SpawnSystemAtLocation, SetNiagaraVariableFloat/Vec3/Color 노드를 사용하여 Niagara 이펙트를 동적으로 생성하고 파라미터를 실시간 제어하세요. 피격 이펙트를 위치/방향에 맞게 스폰하세요.

실습 2: Niagara에서 게임 데이터 읽기

Object Parameter로 게임 액터의 참조를 Niagara에 전달하고, Data Interface를 통해 액터의 위치, 속도, 체력 등을 실시간으로 읽어 이펙트에 반영하는 시스템을 만드세요.

심화 과제: Niagara Component Pool 시스템

자주 스폰/디스폰되는 이펙트(총구 화염, 발걸음 먼지 등)를 위한 오브젝트 풀링 시스템을 구현하세요. UNiagaraComponentPool을 활용하여 GC 부하를 줄이세요.