PART 3 · 강의 3/3

파괴 이벤트와 필드

Field System으로 파괴를 제어하고, 이벤트로 게임 로직을 연결하기

01

Field System 개요

물리 영향력 필드로 파괴 제어하기

Field System은 공간에 물리적 영향력을 정의하는 시스템입니다. 폭발, 바람, 앵커, 비활성화 등 다양한 필드를 배치하여 Geometry Collection의 파괴를 정밀하게 제어할 수 있습니다.

Field 유형 클래스 효과
External StrainURadialFalloff방사형으로 Strain(응력)을 적용하여 파괴 유발
Linear ForceUUniformVector균일한 방향 힘 (바람, 폭풍)
Radial ForceURadialVector중심에서 방사형 힘 (폭발)
DisableURadialIntMask영역 내 파편 비활성화/제거
AnchorUAnchorField파편을 공간에 고정
KillUKillField영역 내 파편 즉시 제거
C++ - Field System 액터 설정
// Field System 액터를 사용한 폭발 구현 UCLASS() class AExplosionField : public AFieldSystemActor { GENERATED_BODY() public: AExplosionField() { // Radial Falloff: 중심에서 멀어질수록 감소하는 Strain RadialFalloff = CreateDefaultSubobject<URadialFalloff>("RadialFalloff"); RadialFalloff->Magnitude = 1500.0f; // Strain 강도 RadialFalloff->MinRange = 0.0f; RadialFalloff->MaxRange = 500.0f; // 영향 반경 RadialFalloff->Default = 0.0f; RadialFalloff->Radius = 500.0f; RadialFalloff->Falloff = EFieldFalloffType::Field_FallOff_Linear; // Radial Vector: 방사형 힘 RadialVector = CreateDefaultSubobject<URadialVector>("RadialVector"); RadialVector->Magnitude = 8000.0f; // 힘의 크기 } void TriggerExplosion() { // 메타 데이터를 통해 필드 적용 대상 지정 GetFieldSystemComponent()->ApplyStrain(RadialFalloff); GetFieldSystemComponent()->ApplyExternalForce(RadialVector); } };
02

Chaos 이벤트 시스템

Breaking, Collision, Trailing, Removal 이벤트

Chaos Destruction은 네 가지 주요 이벤트를 제공합니다. 이벤트를 게임 로직, 이펙트, 사운드와 연결하여 풍부한 파괴 연출을 만듭니다.

이벤트 델리게이트 발생 시점 제공 정보
BreakOnChaosBreakEvent파편이 클러스터에서 분리될 때위치, 속도, 질량, 크기
CollisionOnChaosPhysicsCollision파편이 다른 물체와 충돌할 때위치, 법선, 임펄스, 속도
TrailingOnChaosTrailingEvent파편이 이동할 때 (궤적)위치, 속도, 각속도
RemovalOnChaosRemovalEvent파편이 제거될 때위치, 질량
C++ - 모든 Chaos 이벤트 바인딩
void ADestructibleBuilding::BeginPlay() { Super::BeginPlay(); UGeometryCollectionComponent* GC = GetGCComponent(); // Breaking 이벤트 GC->OnChaosBreakEvent.AddDynamic(this, &ADestructibleBuilding::HandleBreak); // Collision 이벤트 (파편 충돌) GC->OnChaosPhysicsCollision.AddDynamic(this, &ADestructibleBuilding::HandleCollision); // Removal 이벤트 (파편 제거) GC->OnChaosRemovalEvent.AddDynamic(this, &ADestructibleBuilding::HandleRemoval); } void ADestructibleBuilding::HandleBreak(const FChaosBreakEvent& Event) { // 파편 크기에 따라 다른 이펙트 if (Event.Mass > 100.0f) { // 큰 파편: 먼지 구름 + 카메라 쉐이크 UGameplayStatics::SpawnEmitterAtLocation( GetWorld(), LargeDustFX, Event.Location ); UGameplayStatics::PlayWorldCameraShake( GetWorld(), HeavyShake, Event.Location, 500.0f, 2000.0f ); } else { // 작은 파편: 가벼운 먼지 UGameplayStatics::SpawnEmitterAtLocation( GetWorld(), SmallDustFX, Event.Location ); } // 사운드 재생 (질량 기반 볼륨) float Volume = FMath::Clamp(Event.Mass / 200.0f, 0.1f, 1.0f); UGameplayStatics::PlaySoundAtLocation( GetWorld(), BreakSound, Event.Location, Volume ); }
03

Anchor Field와 구조적 무결성

고정점 기반의 현실적 파괴 시뮬레이션

Anchor Field는 파편을 공간에 고정시키는 필드입니다. 건물의 기초, 벽의 하단 등을 앵커로 설정하면, 앵커된 파편과 연결된 클러스터만 유지되고 나머지는 중력에 의해 떨어지는 구조적 무결성(Structural Integrity) 시뮬레이션이 가능합니다.

Anchor 활용 시나리오
  • 건물 벽 — 바닥에 닿는 부분을 Anchored로 설정. 중간을 파괴하면 위쪽이 무너짐.
  • 다리 — 양쪽 끝을 Anchored. 중앙을 파괴하면 지지력을 잃고 붕괴.
  • 천장 — 기둥과 연결된 부분을 Anchored. 기둥 파괴 시 천장 붕괴.
  • 나무 — 뿌리 부분을 Anchored. 줄기를 파괴하면 위쪽이 넘어짐.
Fracture Mode에서 Anchored 설정

Fracture Mode 에디터에서 개별 bone을 선택한 후, Initial Dynamic StateAnchored로 변경하면 됩니다. 또는 Selection > Set Initial Dynamic State 메뉴에서 일괄 설정할 수 있습니다.

04

파괴 최적화 전략

대규모 파괴에서 성능 유지하기

최적화 기법 설정 효과
파편 수명 제한Removal > Max Cluster Level / Removal Timer오래된 파편 자동 제거
크기 기반 제거Removal > Min Size작은 파편 즉시 제거
거리 기반 비활성화Clustering > Max Cluster Level by Distance원거리에서 세밀한 파괴 비활성화
Sleep 설정Physics > Sleep Threshold정지된 파편 시뮬레이션 중단
Damage ThresholdDamage > Damage Threshold약한 충격은 무시
Object PoolC++ 커스텀 구현파편 액터 재사용
파편 수 관리

화면에 동시에 존재하는 활성 파편 수가 1000개를 넘지 않도록 관리하세요. 콘솔 명령 stat Chaos로 현재 활성 파티클 수를 모니터링할 수 있습니다. 파편 수명을 3~5초로 제한하고, 페이드아웃 후 제거하는 것이 일반적입니다.

SUMMARY

핵심 요약

  • Field System은 공간에 물리적 영향력(Strain, Force, Anchor, Kill)을 정의하여 파괴를 제어합니다.
  • Chaos는 Break, Collision, Trailing, Removal 네 가지 이벤트를 제공합니다.
  • 이벤트의 질량/속도 정보를 활용해 파편 크기에 비례하는 이펙트와 사운드를 연출합니다.
  • Anchor Field로 구조적 무결성 시뮬레이션을 구현합니다 (기둥 파괴 → 천장 붕괴).
  • 파편 수명 제한, 크기 기반 제거, Sleep 등으로 대규모 파괴 성능을 관리합니다.
PRACTICE

도전 과제

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

실습 1: Field System 기본 설정

Radial Falloff Field를 레벨에 배치하고 Geometry Collection과 연결하세요. Magnitude와 Radius를 조정하여 폭발 효과를 시뮬레이션하고, External Strain Field로 서서히 무너지는 구조물을 만드세요.

실습 2: 파괴 이벤트 콜백 구현

Geometry Collection의 OnChaosBreakEvent를 바인딩하여 파괴 시 파편 위치에 파티클 이펙트와 사운드를 생성하세요. 파편 크기에 따라 다른 강도의 이펙트가 재생되도록 구현하세요.

심화 과제: 인터랙티브 파괴 시퀀스

여러 Geometry Collection과 Field System을 조합하여 기둥 파괴 → 천장 낙하 → 벽 붕괴의 연쇄 파괴 시퀀스를 구현하세요. 카메라 셰이크와 먼지 파티클도 연동하세요.