파티클 시스템
파티클은 Cascade와 Niagara 두 가지로 나뉜다.
파티클을 사용하는 방법은 크게 3가지로 나뉜다.
Cascade와 달리, Niagara는 C++에서 사용 시 Build.cs 파일에 Niagara 모듈을 추가해야 한다.
using UnrealBuildTool;
public class Slash : ModuleRules
{
public Slash(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicIncludePaths.AddRange(new string[] { "Slash" });
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Niagara" });
PrivateDependencyModuleNames.AddRange(new string[] { });
}
}
첫 번째 방법
특정 위치에 파티클을 생성한다.
한 번 생성하면 파티클이 끝나거나, 따로 삭제하지 않으면 계속 남아있는다.
(ex. 총알 발사 후 피격 위치에 파티클 생성)
Cascade : UParticleSystem 변수를 선언한다.
Niagara : UNiagaraSystem 변수를 선언한다.
// Cascade
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UParticleSystem> CascadeParticle;
// Niagara
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UNiagaraSystem> NiagaraParticle;
Cascade : Kismet/GameplayStatics.h 헤더 추가, SpawnEmitterAtLocation 함수 호출
Niagara : NiagaraFunctionLibrary.h 헤더 추가, SpawnSystemAtLocation 함수 호출
// Cascade
#include "Kismet/GameplayStatics.h"
if (CascadeParticle)
{
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), CascadeParticle, GetActorLocation());
}
// Niagara
#include "NiagaraFunctionLibrary.h"
if (NiagaraParticle)
{
UNiagaraFunctionLibrary::SpawnSystemAtLocation(this, NiagaraParticle, GetActorLocation());
}
두 번째 방법
물체의 소켓에 파티클을 종속시키고, 파티클을 생성한다.
물체의 파티클을 종속시키기에 물체가 움직이면 파티클도 같이 움직인다.
(ex. 총구 화염, 캐릭터 오라)
Cascade : UParticleSystem 변수를 선언한다.
Niagara : UNiagaraSystem 변수를 선언한다.
// Cascade
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UParticleSystem> CascadeParticle;
// Niagara
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UNiagaraSystem> NiagaraParticle;
특정 물체에 종속시키기에 종속시킬 대상을 StaticMesh라면 USceneComponent를 생성해서 종속시키고, SkeletalMesh라면 소켓을 생성해서 소켓에 종속시킬 수 있다.

Cascade : Kismet/GameplayStatics.h 헤더 추가, SpawnEmitterAttached 함수 호출
Niagara : NiagaraFunctionLibrary.h 헤더 추가, SpawnSystemAttached 함수 호출
// Cascade
#include "Kismet/GameplayStatics.h"
if (CascadeParticle)
{
UGameplayStatics::SpawnEmitterAttached(CascadeParticle, Mesh, TEXT("SocketName"));
}
// Niagara
#include "NiagaraFunctionLibrary.h"
if (NiagaraParticle)
{
UNiagaraFunctionLibrary::SpawnSystemAttached(NiagaraParticle, Mesh, TEXT("SocketName"));
}
세 번째 방법
블루프린트에 컴포넌트로 선언하여 계속 파티클을 생성한다.
(ex. 화염구를 던질 때, 총알이 날아가는 중)
Cascade : UParticleSystemComponent 변수 선언
Niagara : UNiagaraComponent 변수 선언
// Cascade
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UParticleSystemComponent> Particles;
// Niagara
UPROPERTY(EditDefaultsOnly, Category = "Particle")
TObjectPtr<class UNiagaraComponent> Particles;
Cascade : Particles/ParticleSystemComponent.h 헤더 추가
Niagara : NiaragaComponent.h 헤더 추가
생성자에서 CDO로 초기화하고, 원하는 컴포넌트 하위에 배치한다.
// Cascade
#include "Particles/ParticleSystemComponent.h"
Particles = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("Particles"));
Particles->SetupAttachment(RootComponent);
// Niagara
#include "NiagaraComponent.h"
Particles = CreateDefaultSubobject<UNiagaraComponent>(TEXT("Particles"));
Particles->SetupAttachment(RootComponent);
사용 예
사용 1
적이 공격당한 위치에 출혈 파티클 생성하기
사용 2
검 궤적 그리기
애니메이션 몽타주의 Trail Notify를 사용하여 캐릭터가 검을 휘두를 때 검 궤적(Weapon Trails)을 그린다.
사용 3
액터에 나이아가라 시스템을 넣어 사용하는 방법
사용 4
적 사망 이펙트 스폰
나이아가라 시스템 내의 파라미터값을 외부(블루프린트)에서 변경하는 방법
'📘Unreal Engine > 📝Unreal Engine' 카테고리의 다른 글
| [Unreal Engine] 입력 시스템 / 향상된 입력 시스템 (Enhanced Input System) (0) | 2024.07.24 |
|---|---|
| [Unreal Engine] 폰(Pawn)과 캐릭터(Character) (0) | 2024.07.24 |
| [Unreal Engine] 머리카락(털) 추가 / UGroomComponent (0) | 2024.05.23 |
| [Unreal Engine] 로그 출력하기 / 커스텀 로그 (0) | 2024.05.21 |
| [Unreal Engine] 어서트 (Assert) (0) | 2024.05.21 |