안동민 개발노트

본문 시작

동적 액터와의 기본 상호작용

Trace와 Skeletal Mesh 데이터를 사용해 움직이는 액터와 충돌하거나 소켓에 부착되는 캐릭터 먼지 효과를 구현합니다.

이전 절에서는 나이아가라 파티클이 정적인 환경 오브젝트(스태틱 메시)와 충돌하는 기본적인 방법을 배웠습니다.

이제는 파티클이 게임 월드 내에서 움직이는 오브젝트, 즉 동적 액터(Dynamic Actor)나 특히 스켈레탈 메시(Skeletal Mesh)와 어떻게 상호작용하고 충돌하는지에 대해 알아보겠습니다.

이는 캐릭터의 피격 효과, 움직이는 차량에서 뿜어져 나오는 연기, 몬스터의 특정 부위에서 발생하는 마법 효과 등 더욱 복잡하고 상호작용적인 비주얼을 구현하는 데 필수적인 기술입니다.

동적 액터와의 상호작용은 단순히 충돌을 감지하는 것을 넘어, 액터의 움직임에 파티클이 반응하거나, 액터의 특정 위치에 파티클을 부착하는 등의 다양한 형태를 포함합니다.


동적 액터와의 콜리전

정적 메시와 달리, 동적 액터, 특히 애니메이션되는 스켈레탈 메시와의 콜리전은 일반 메시 거리 필드는 스킨 애니메이션으로 변형된 표면의 정확한 충돌 데이터가 아닙니다. 단순히 품질 설정을 높이는 문제와 구분합니다.

이때 주로 사용되는 방법은 다음과 같습니다.

Trace 콜리전 모드 활용

  • CPU Collision: 이미터를 CPU Sim으로 두고 Collision의 월드 trace 경로를 사용합니다. GPU Distance Field 설정을 그대로 두고 채널만 바꾸는 방식이 아닙니다. 대상의 query collision 형상과 시간 간격에 따라 실제 감지 범위가 달라집니다.
  • 콜리전 채널 설정
    • Trace 모드를 사용할 때는 파티클이 어떤 콜리전 채널을 가진 액터와 충돌할지 설정해야 합니다. Collision 모듈의 Trace Channel 속성에서 적절한 trace 채널(예: Visibility 또는 프로젝트에서 만든 Trace Channel)을 선택합니다.
    • 충돌하고자 하는 동적 액터의 메시 컴포넌트(Static Mesh Component 또는 Skeletal Mesh Component)의 Collision Presets에서 query collision이 활성화되어 있고 해당 trace 채널에 대한 Block 응답이 설정되어 있는지 확인해야 합니다. WorldDynamic/PhysicsBody는 기본적으로 Object Type 분류이며 trace 채널과 혼동하지 않습니다. Skeletal Mesh는 Physics Asset 등 실제 조회 형상을 확인합니다.
  • 단점: 많은 수의 파티클이 동시에 트레이스 콜리전을 수행할 경우 성능 비용이 높아질 수 있습니다.

스켈레탈 메시 전용

스켈레탈 메시와의 상호작용에는 Niagara Data Interface Skeletal Mesh를 활용하는 것이 가장 강력하고 유연한 방법입니다.

이 데이터 인터페이스는 스켈레탈 메시의 본(Bone), 소켓(Socket), 메시 표면 등 애니메이션되는 기하학적 정보를 나이아가라 시스템에 직접 노출시킵니다.

  • 주요 활용
    • 스켈레탈 메시의 소켓에 파티클 부착: 캐릭터의 손, 발, 머리 등 특정 소켓에 파티클을 스폰하거나 부착하여 캐릭터와 함께 움직이게 합니다.
    • 스켈레탈 메시 표면에 파티클 스폰: 캐릭터의 몸에서 먼지, 물방울, 피격 이펙트 등이 뿜어져 나오게 합니다.
    • 스켈레탈 메시의 본을 따라 파티클 이동: 몬스터의 꼬리나 촉수 등 움직이는 본을 파티클이 따라가게 합니다.
    • 콜리전과의 구분: Skeletal Mesh DI는 본·소켓·표면 샘플을 공급합니다. Physics Asset 충돌 쿼리는 별도 지원 DI/충돌 경로이며, 표면 샘플링만으로 충돌 응답이 생기지는 않습니다.

동적 액터에 파티클 시스템 부착하기

가장 기본적인 동적 상호작용은 나이아가라 시스템 자체를 동적 액터에 부착(Attach)하는 것입니다.

  • 블루프린트에서 부착

    캐릭터나 차량과 같은 동적 액터의 블루프린트 클래스를 엽니다.

    Components 패널에서 Add 버튼을 클릭하고 Niagara Particle System 컴포넌트를 추가합니다.

    추가된 Niagara Particle System 컴포넌트를 선택하고, Details 패널에서 Niagara System 속성에 여러분의 나이아가라 시스템 에셋(예: NS_BasicSpawn)을 할당합니다.

    Niagara 컴포넌트를 Skeletal Mesh 컴포넌트의 자식으로 옮긴 뒤 Details의 Parent Socket에서 실제 본/소켓 이름을 선택합니다. 컴포넌트 트리에서 소켓 자체를 부모로 만드는 것으로 설명하지 않습니다.

  • 활용 예시
    • 캐릭터가 발걸음을 뗄 때 발밑에서 발생하는 먼지 효과.
    • 총구에서 발생하는 총구 화염 효과.
    • 엔진에서 뿜어져 나오는 차량 배기 가스.

사용자 정의 데이터 인터페이스를 전달

더욱 복잡한 상호작용을 위해서는 사용자 정의 데이터 인터페이스를 통해 액터의 특정 데이터를 나이아가라 시스템에 직접 전달할 수 있습니다.

  • Actor Component DI 또는 User Parameter: 지원 버전의 Actor Component DI로 트랜스폼을 읽거나 Blueprint에서 필요한 위치·방향만 User Parameter로 전달합니다. DI의 source binding과 값의 좌표 공간을 맞춥니다.
  • Niagara Data Interface Skeletal Mesh (다시 강조): 이미 설명했듯이, 스켈레탈 메시의 본/소켓/표면 정보를 나이아가라에 전달하는 가장 강력한 방법입니다.

직접 해보기: 캐릭터 발 밑에 먼지 효과 부착

이 기능은 블루프린트 연동이 필수적이므로 실제 실습보다는 개념적인 설명을 통해 이해도를 높이겠습니다.

나이아가라 시스템 생성: 바닥에서 솟아오르는 먼지나 연기 같은 작은 효과 (NS_FootDust)를 만듭니다.

Emitter Update의 Spawn Rate는 낮게, Particle Spawn의 Lifetime과 Sprite Size는 작게, 초기 Add Velocity는 Z축으로 살짝 위로 설정합니다. Update에는 Particle State와 Solve Forces and Velocity를 둡니다.

캐릭터 블루프린트 열기: 언리얼 엔진의 기본 캐릭터 블루프린트 (BP_ThirdPersonCharacter 또는 유사한 것)를 엽니다.

Niagara Particle System 컴포넌트 추가
  • Components 탭에서 Add 버튼을 클릭하고 Niagara Particle System 컴포넌트를 추가합니다.
  • 새로 추가된 컴포넌트를 선택하고 Niagara System 속성에 NS_FootDust 시스템을 할당합니다.
컴포넌트 부착
  • Niagara Particle System 컴포넌트를 드래그하여 스켈레탈 메시 컴포넌트 (Mesh) 아래로 이동시킵니다.
  • Details 패널에서 Parent Socket 속성을 찾습니다. 이 속성을 클릭하고 캐릭터의 발에 해당하는 본(예: foot_l, foot_r)을 선택합니다.
  • Location, Rotation, Scale 오프셋을 조절하여 파티클 시스템이 발밑에 정확히 위치하도록 합니다.
컴포넌트 활성화/비활성화 제어 (선택 사항)
  • 이동 상태가 바뀔 때만 Activate/Deactivate를 호출합니다. 같은 상태에서 매 Tick 재활성화하지 않습니다. 발 접촉 순간의 먼지라면 Anim Notify에서 지면 위치에 일회성 시스템을 스폰하는 방법도 비교합니다.
  • Emitter Local Space가 꺼진 입자는 생성된 뒤 월드에 남아 이동할 수 있습니다. 켜면 이미 생성된 먼지도 부모 움직임을 따라갈 수 있으므로 바닥 먼지와 부착 오라를 구분합니다.
  • 대상 파괴·EndPlay 때 생성한 컴포넌트와 외부 참조를 정리합니다. 소켓이 없을 때 조용히 원점 효과를 만들지 않도록 이름을 확인합니다.

시뮬레이션 성능 고려 사항

동적 액터와 연결할 때는 참조 방식과 갱신 비용을 먼저 분리해 판단합니다.

  • Trace 콜리전: 복잡한 환경에서 많은 파티클이 Trace 콜리션을 수행하면 CPU 비용이 높아질 수 있습니다. 충돌할 입자 수·수명·조회 범위를 제한하고 필요한 경우에만 사용합니다.
  • 스켈레탈 메시 데이터 인터페이스: 스켈레탈 메시의 본이나 표면 데이터를 나이아가라로 스트리밍하는 데는 비용이 발생합니다. 특히 복잡한 스켈레탈 메시의 모든 본을 추적하거나, 많은 수의 파티클이 메시 표면을 참조할 경우 성능에 영향을 줄 수 있습니다.
  • 컴포넌트 부착: 파티클 시스템을 액터에 부착하는 것은 비교적 효율적이지만, 부착된 시스템의 파티클 수가 너무 많거나 복잡한 연산을 수행하면 액터 자체의 업데이트 비용을 증가시킬 수 있습니다.
  • LOD 및 최적화: 동적 액터와의 상호작용 효과도 LOD(Level of Detail) 및 스케일러빌리티 설정을 통해 최적화해야 합니다. 멀리 있는 액터의 파티클 효과는 단순화하거나 비활성화합니다.

Niagara의 충돌과 샘플링은 화면 표현에 사용하고, 명중·피해·서버 권한 판정은 액터와 게임플레이 코드가 담당하게 합니다. 대상이 빠르게 이동하거나 비활성화될 때 참조 갱신과 효과 종료도 확인합니다.