폰의 주요 구성요소
cf. Unreal C++ Basic
Capsule = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule"));
CreateDefaultSubobject<T>함수는 언리얼 엔진에서 Default Subobject를 생성한다.
파라미터로는 텍스트를 입력해서, 엔진이 참조하는 컴포넌트 내부의 이름을 명명한다.언리얼 엔진에서, 클래스의 생성자에서 기본적인 컴포넌트를 설정할 때 CreateDefaultSubobject` 함수를 통해 Blueprint에서도 자동으로 인식되게 한다.
폰에 대한 입력 처리와 무브먼트를 설정해본다.
[Project Setting] - [Input] - [Binding] section
Action Mappings와 Axis Mappings

조이스틱의 레버 역할로, -1, 0, 1 값의 스케일로 로직을 전달한다.
ex. WASD 이동 방향키 : 미입력 시 0, 전진 W 1의 값, 후진 S -1의 값
조이스틱의 버튼 역할로, 눌렀을 때와 뗄 때 두 시점의 신호로 전달한다.
ex. space 바를 통한 점프
폰/캐릭터의 이동, 점프, 공격, 피격, 사망 등과 관련하여 다양한 상호작용을 하는 데에 있어서 자연스러운 연출을 주기 위해 애니메이션 동작이 필요하다.
보통, 원본 리소스로 3D 애니메이션 형식 File Exchange Format으로 .fbx 파일을 이용한다.
[Content Browser] → [Import] → FBX 파일 선택
UE 에디터는 해당 소스를 분석하여 자동으로 mesh, animation, material을 추출하여 .uasset 형식으로 변환하여 저장한다.
void AMIRAPawn::BeginPlay()
{
Super::BeginPlay();
// setting for animations
Mesh->SetAnimationMode(EAnimationMode::AnimationSingleNode);
UAnimationAsset* AnimAsset = LoadObject<UAnimationAsset>(nullptr, TEXT("/Game/ParagonWraith/Characters/Heroes/Wraith/Animations/Jog_Fwd_Start.Jog_Fwd_Start"));
if (AnimAsset != nullptr)
{
Mesh->PlayAnimation(AnimAsset, true);
}
}
단순하게, beginplay로 생성 시 단일 애니메이션 재생으로 지정한 예시이다.
앞선 방법은 규모가 커진 게임에서는 관리하기 어려운 한계점이 분명하므로, 체계적인 anim 시스템을 설계하도록 Animation Blueprint 를 이용한다.
character는 기본적으로 pawn 클래스를 상속받으나,
floatingpawnmovement를 사용하는 pawn과 달리 charactermovement 컴포넌트를 이용한다.
Gravity가 반영된 움직임을 제공한다.
걷기 이외에도 crouching, flying, swimming 등의 다양한 형태의 이동 모드르 분화된 움직임의 설정이 가능하다.
멀티 플레이 네트워크 환경에서 움직임의 자동으로 동기화한다.