폰의 조작 구현
UE5 부터는 아래의 방식이 Deprecated 방식이기에
Enhanced Input System을 사용하면 된다
만약 UE4를 사용하는 프로젝트라면
아래의 방식으로 조작을 구현할 수 있다
1) Input 키 설정
Toolbar > Settings > Project Settings > Input에서 입력 설정이 가능하다
- Axis Mappings
조이스틱의 레버와 유사하고
축과 관련된 정보를 담으며
-1 ~ 1 사이의 값이 게임로직에 전달된다
- Action Mappings
조이스틱의 버튼과 유사하고
0 혹은 1 값이 게임로직에 전달된다
키보드의 조작을 통해 이동을 구현하기 때문에
Axis Mappings를 추가해서 UpDown과 LeftRight 입력을 생성하면 된다
UpDown에는 W키 / S키, LeftRight에는 A키 / D키를 배정하고
각각의 키를 서로 다른 방향으로 구분하기 위해 Scale 값을 다르게 설정하면 된다
2) SetupPlayerInputComponent()에서 함수 바인드
언리얼은 입력을 처리하기 위해 InputComponent를 제공한다
InputComponent에서 입력 처리 함수를 바인드 시키면 입력 신호는 자동으로
해당 입력 처리 함수의 인자값으로 전달된다
입력 처리 함수를 바인드 하기에 적절한 이벤트 함수인
SetupPlayerInputComponent() 함수를 작성하면 된다
그리고 바인드 할 함수에
AddMovementInput(WorldDirection, Scale) 함수를 이용해 움직이게 하면 된다
WorldDirection은 이동할 방향을 결정하고 월드 좌표계 기준 방향벡터를 전달한다
Scale은 방향에 따라 움직이는 값이고 우리가 설정한 Scale 값대로 움직인다
// SPlayerPawn.h
...
class STUDYPROJECT_API ASPlayerPawn : public APawn
{
...
protected:
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private:
void UpDown(float InAxisValue);
void LeftRight(float InAxisValue);
private:
...
};
// SPlayerPawn.cpp
...
void ASPlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &ThisClass::UpDown);
PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &ThisClass::LeftRight);
}
void ASPlayerPawn::UpDown(float InAxisValue)
{
AddMovementInput(GetActorForwardVector(), InAxisValue);
}
void ASPlayerPawn::LeftRight(float InAxisValue)
{
AddMovementInput(GetActorRightVector(), InAxisValue);
}
플레이어 컨트롤러의 입력 필터링
언리얼 엔진의 입력 시스템의 입력 값은
InputComponent Checks를 통해 필터링된다
만약 PlayerController에서 입력 처리 로직이 작성되면,
해당 입력 값은 필터링 되어서 폰에 전달되지 않고
바로 게임 로직으로 이동한다
따라서, 폰을 조종하기 위한 입력 로직은 폰 클래스에 구현하고
PlayerController에서 입력 로직은 구현하지 않는 것이 올바른 방식이다
SetInputMode() 함수
플레이 버튼을 누르면 뷰포트로 바로 포커스가 잡히지 않는다
만약 바로 뷰포트로 포커스를 잡히게 하고 싶다면
SetInputMode() 함수를 사용하면 된다
// SPlayerController.cpp
#include "Controller/SPlayerController.h"
ASPlayerController::ASPlayerController()
{
PrimaryActorTick.bCanEverTick = true;
}
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 Character - Pawn vs. Character (0) | 2024.05.13 |
---|---|
언리얼 Pawn - 애니메이션 기초 설정 (0) | 2024.05.13 |
언리얼 Pawn - Pawn 클래스 생성 및 내부 (0) | 2024.05.13 |
언리얼 게임 플레이 프레임워크 - 이벤트 함수 Flow (0) | 2024.05.12 |
언리얼 게임 플레이 프레임워크 - 플레이어 컨트롤러와 폰 (0) | 2024.05.12 |