개요
UT 에서 캐릭터 관련 애셋들이 실제로 어떻게 사용되는지 구체적으로 알아 보기 전에 캐릭터의 로직에 대해서 살펴 볼 필요가 있습니다.
플레이어가 게임 도중에 취할 수 있는 행동은 Input 매핑과 관련이 있습니다. "Edit >> Project Settings >> Input" 항목에는 두 종류의 Input Mapping 이 존재합니다; Action Mapping 과 Axis Mapping.
이 문서에서는 어떠한 입력 매핑이 존재하고, 그런 것들이 어떻게 캐릭터와 연관되는지에 대해서 살펴 보도록 하겠습니다.
입력 매핑
다들 알고 계실거라 생각하지만 노파심에 설명하자면 Action Mapping 은 단일 이벤트이며, Axis Mapping 은 지속 이벤트입니다. 이러한 Input Mapping 과 관련한 자세한 내용이 궁금하시다면, 언리얼 공식 문서의 [ 입력 (Input) ] 항목을 참조하십시오. 참고로 매핑을 할 때는 특정 키가 연관되어 있다는 것만 지정하지, down, up, double click 등의 정보를 명시적으로 지정하지는 않습니다.
어쨌든 UT 의 Action Mapping 은 다음 표와 같습니다( 여기에서는 PC 관련 매핑만 다루도록 하겠습니다 ).
매핑 키 |
매핑 입력 키 |
설명 | AUTPlayerController 메서드 |
Jump |
Space Bar |
점프. | IE_Pressed : Jump() |
Crouch |
C Left Ctrl |
앉기. | IE_Pressed : Crouch() IE_Released : UnCrouch() |
Slide |
Left Shift |
슬라이딩. | IE_Pressed : Slide() |
PrevWeapon |
Mouse Wheel Up |
이전 무기를 선택. | IE_Pressed : PrevWeapon() |
NextWeapon |
Mouse Wheel Down |
다음 무기를 선택. | IE_Released : NextWeapon() |
ThrowWeapon |
M |
무기를 버림. | IE_Released : ThrowWeapon() |
StartFire |
Left Mouse Button Right Ctrl |
총질을 시작. | IE_Pressed : OnFire() |
StopFire |
Left Mouse Button Right Ctrl |
총질을 멈춤. | IE_Released : StopFire() |
StartAltFire |
Right Mouse Button |
아마도 alternative fire( secondary fire ). Alternative fire 를 시작. | IE_Pressed : OnAltFire() |
StopFire |
Right Mouse Button |
Alternative fire 를 멈춤. | IE_Released : OnStopAltFire() |
StartActivatePowerup |
Q |
Powerup( U Damage, Invisibility, Berserk, Jump Boots ) 을 활성화함. | IE_Pressed : OnActivatePowerupPress() |
SlowerEmote |
Mouse Wheel Down |
감정 표현 애니메이션을 느리게 만듦. | IE_Pressed : FasterEmote() |
FasterEmote |
Mouse Whee Up |
감정 표현 애니메이션을 빠르게 만듦. | IE_Pressed : SlowerEmote() |
Play Taunt |
J |
첫 번째 도발 애니메이션 재생. | IE_Pressed : PlayTaunt() |
Play Taunt2 |
K |
두 번째 도발 애니메이션 재생. | IE_Pressed : PlayTaunt2() |
TapRight |
D |
오른쪽으로 회피. | IE_Pressed : OnTabRight() IE_Released : OnTapRightRelease() |
TapLeft |
A |
왼쪽으로 회피. | IE_Pressed : OnTabLeft() |
TapForward |
W |
앞쪽으로 회피. | IE_Pressed : OnTabForward() |
TapBack |
S |
뒤쪽으로 회피. | IE_Pressed : OnTabBack() |
SingleTapDodge |
V |
앞의 TabXXX 시리즈가 더블 클릭을 요구하는데 단일 클릭만으로 회피. | IE_Pressed : OnSingleTabDodge() |
ShowScores |
Tab |
점수 현황판을 보여 줌. | IE_Pressed : OnShowScores() |
ShowMenu |
Escape |
메뉴를 보여 줌. | ShowMenu() |
Talk |
T |
전체 채팅창을 보여 줌. | IE_Pressed : Talk() |
TeamTalk |
Y |
팀 채팅창을 보여 줌. | IE_Pressed : TeamTalk() |
Axis Mapping 은 다음 표와 같습니다.
매핑 키 |
매핑 입력 키 |
스케일 |
설명 | AUTPlayerController 메서드 |
MoveForward |
W Up |
1.0 1.0 |
앞쪽으로 이동. | MoveForward() |
MoveBackward |
S Down |
1.0 1.0 |
뒤쪽으로 이동. | MoveBackward() |
MoveLeft |
A |
1.0 |
왼쪽으로 이동. | MoveLeft() |
MoveRight |
D |
1.0 |
뒤쪽으로 이동. | MoveRight() |
TurnRate |
Left Right |
-1.0 1.0 |
비율로 Yaw 회전. | TurnAtRate() |
Turn |
Mouse X |
1.0 |
Yaw 회전. | AddYawInput() |
LookUp |
Mouse Y |
-1.0 |
Pitch 회전. | AddPitchInput() |
MoveUp |
C Space Bar |
1.0 -1.0 |
수직으로 이동. | MoveUp() |
이러한 입력 매핑들은 AUTPlayerController::SetupInputComponent() 에서 수행됩니다.
이동 입력
이동을 위한 이벤트 처리 로직은 아래의 sequence diagram 에 나와 있습니다. 간단한 실행 흐름만을 보여 주려고 했기 때문에, 내부적으로 설정되는 필드같은 것은 생략했습니다. 여기에서 전부 표현해 주기에는 너무 많습니다.
반복되는 호출에 대해서는 하위 호출을 생략했으니 보시는데 주의하시기 바랍니다.
위의 다이어그램은 매우 복잡해 보이지만 사실 매우 단순합니다. 입력은 Player Controller( AUTPlayerController ) 에서 처리합니다. 그리고 Character( AUTCharacter ) 로 전달하죠. 그러면 Character 는 최종 TM 을 결정하기 위한 플래그나 정보를 설정합니다. 그런데 애니메이션 피드백이나 물리 피드백을 위해서 Movement Component( UUTCharacterMovement ) 에 상태 정보를 전달합니다.
이벤트 처리 단계에서는 대부분 현재 상태나 플래그를 설정하는 것으로 끝납니다. 애니메이션 피드백이나 물리 피드백을 위한 실제 처리는 UUTCharacterMovement::PerformMovement() 에서 처리됩니다.
PerformMovement() 의 내부가 어떻게 구성되는지 좀 더 자세히 알고자 하신다면 [ UE4 캐릭터 이동 시스템 가이드 ]를 참조하시기 바랍니다.
전투 입력
FPS 게임이다보니 전투와 관련한 입력은 그리 많지 않습니다; fire, alt-fire, select weapon, drop weapon.
전투 입력이나 이동 입력이나 전반적으로 그 처리의 흐름이 크게 다르지 않습니다. 단지 Movement Component 와의 연관성이 더 적습니다. 특이한 것은 FDeferredFireInput 의 인스턴스는 UUTCharacterMovement::TickComponent() 호출 시점에서 소비된다는 것입니다.
나가며
여기에서는 플레이어 입력과 관련한 로직들을 간단하게 살펴 보았습니다.
그런데 근본적으로 우리가 관심을 가지고 있는 것은 이런 로직들이 최종적으로 다른 애셋들( 메쉬, 애니메이션 등 )과 어떤 식으로 연관되는지 알아 내는 것이므로 아직 성에 차지 않을 수 있습니다. 하지만 내용이 너무 복잡해져서 여기에서 모두 담기 어려운 면이 있어서 나눠서 분석할 계획입니다.
'Engines > UE4' 카테고리의 다른 글
UE4 Brush, BSP, PhysX Convex 에 대해 (7) | 2017.04.02 |
---|---|
UE4 의 Package, Asset, 그리고 Paths 에 대해... (4) | 2017.04.01 |
[ TIP ] UE4 에서 Visual Studio 2015 Graphics Diagnostics 이용하기 (0) | 2017.01.16 |
[ UT 분석 ] 6.2. 1인칭 캐릭터 - 이동과 애니메이션 (0) | 2016.07.04 |
[ UT 분석 ] 5.4. 이동 모드와 속성들 (0) | 2016.06.26 |
[ UT 분석 ] 6.1. 1인칭 캐릭터 - 구조 (0) | 2016.06.21 |
[ UT 분석 ] 5.2. 애니메이션 기본 구조 (0) | 2016.06.06 |
[ UT 분석 ] 5.1. 캐릭터 외형 (0) | 2016.06.06 |
[ UT 분석 ] 4. 프로젝트 세팅 및 게임 모드 (0) | 2016.05.31 |
[ UT분석 ] 5.0. 캐릭터 개요 (0) | 2016.05.31 |