다이나믹 오브젝트

전제

엔진 내 레벨 및 PC와 상호작용하는 Actor 타입을 (일명 다이나믹오브젝트) 개발한다. 이 Actor 의 요구사항은 다음과 같은 것들이다.

  • PhysX에 기반하여 움직이되 레벨 내 다른 것들(PC, NPC, Level 등)과 상호작용할 수도 있다.
  • 클라이언트 간 동기화된다.
  • 물체의 변형deformation이 있을 수 있다.
  • Health를 가지고 그것이 0이되면 파괴될 수 있다.
  • 특정 부위가 (Health를 가지고) 떨어져 나갈 수 있다.

분석

UE3 상에서 가장 위의 전제에 부합되는 녀석을 꼽으라면 KActor일 것이다. 여기선 이와 관련된 여러 Actor들을 분석해본다.

DynamicSMActor

특징

  • Actor를 상속. 나름 깊이가 얕은 상위 클래스
  • 추상 클래스. 자체적으로 사용되지 못하고 KActor, InterpActor 로 상속되어진다.

기능

  • StaticMesh의 translation, rotation, scale 등이 복제된다.
  • material, decal 도 복제된다.
  • RB가 휴면상태asleep일 때 (StaticMeshComponent.RigidBodyIsAwake()가 false일 때) Pawn 에 Base로써 부착attach될 수 있다.

InterpActor

특징

  • DynamicSMActor 를 상속
  • Matinee 와 연동되어 StaticMesh 를 컨트롤 하기 위한 용도로 제작된 클래스

기능

  • checkpoint 에 저장되어질 수 있다.
  • NavigationPoint 기능이 있어서 AI 에게 이와 관련된 notification 보낼 수 있다. 예를 들어 InterpActor를 활용한 엘레베이터나, 문짝 등의 변화가 Navigation 에 영향을 미치게 할 수 있다.
  • 다양한 상황에 사운드를 출력시킨다. 다만 변수들의 이름을 보면 문이 Open, Opening, Opened, Close, Closing, Closed 될 때 출력되는 사운드들이다. 혹시 문짝의 형태가 아닌 mover의 경우엔 이 사운드 리소스들을 사용할 수 없을지도 모른다.
  • 다른 Actor 를 침해할 때, stop할 것인지를 정할 수 있다.

KActor

언리얼엔진에서 그나마 상기 전제에 가장 근접한 용도로 구현되어 있는 KActor란 녀석을 객관적으로 분석해 본다.

특징

  • DynamicSMActor 를 상속
  • Physics 에 네이티브 코드가 구현되어 있다. native(Physics)
  • 언리얼에디터에서 property 카테고리가 Navigation 으로 되어 있다. 이와 연관이 많은 Actor라는 뜻?

기능

  • 데미지가 가해지면 Impulse 를 줄 수 있다.
  • Impact/slide 효과(파티클+사운드)를 줄 수 있다.
  • KActor의 Z축을 World상의 Z축으로 회전되도록 힘torque을 줄 수 있다. StayUprightSpring
  • KActor의 최대 속도를 제한시킬 수 있다.
  • 엔진에 제공하는 강체운동(RigidBody) 운동을 시뮬레이션시킬 수 있다.
  • RigidBody 상태를 복제replication시킬 수 있다.
  • 클라이언트에서의 Pawn과의 충돌 처리를 무시함으로써 서버에서만 충돌판정이 이뤄지도록 한다. 이를 통해 서버-클라 상호복제에 의한 떨림현상 등을 없앨 수 있다. 기본적으로 이 기능은 활성화

UDKKActorBreakable

특징

  • KActor 를 상속

기능

  • Health 를 가진다.
  • Health 가 0이 되면 뽀개질break수 있다. 그에 따른 연출 (particle system)
  • 다른 Actor 를 침범했을 때, 그 Actor 에게 데미지를 줄 수 있다.
  • 다른 Actor 를 침범했을 때, 자신에게 데미지를 줄 수 있다.

참고