Unreal

11. The Pawn Class & Camera/Spring Arm & Enhanced Input System (3)

Kelvin의 게임개발 2024. 1. 3. 17:01
728x90
반응형

1. Camera Component & SpringArm Component

 

 

카메라를 사용하기 위해서 CameraComponent를 추가해야 한다

 

원하는 만큼 Transform offset을 주어 거리 조절을 할 수 있다

 

하지만 이런 방식으로 카메라의 거리 및 각도를 조절하는건 좋지 않고 SpringArm에 CameraComponent를 Attach시키는 방식을 권장한다

 

SpringArm은 Camera가 벽과 같은 충돌체와 충돌하면 줄어들며 TargetArmLength로 SpringArmLength 조절도 가능하며 여러가지 이점이 있다 (Runtime에 카메라 거리 조절이 쉽다)

 

 

SpringArmComponent는 USpringArmComponent타입이고 CameraComponent는 UCameraComponent이다

 

class USpringArmComponent;
class UCameraComponent;

UPROPERTY(VisibleAnywhere)
USpringArmComponent* SpringArm;

UPROPERTY(VisibleAnywhere)
UCameraComponent* ViewCamera;
ABird::ABird()
{
	PrimaryActorTick.bCanEverTick = true;

	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	ViewCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("ViewCamera"));

	SpringArm->SetupAttachment(GetRootComponent());
	ViewCamera->SetupAttachment(SpringArm);

	SpringArm->TargetArmLength = 300.f;
}

 

다른 Component들과 마찬가지로 Create & Attach를 해준다

 

SpringArm의 TargetArmLength값을 조절하여 SpringArm길이를 조절할 수 있다 (float)

 

SpringArm, Camera에 있는 UsePawnControlRotation값을 True로 하면 Controller의 회전값을 SpringArm과 Camera에 적용시킬 수 있다

 

SpringArm->bUsePawnControlRotation = true; //In C++

 

 

2. Using Two Dimensional Input Actions

 

InputAction의 2D Vector Value값으로 회전,위아래 전환이 가능하다

 

기존의 W키로 앞뒤로 움직이던 InputAction인 IA_Move와 별개로 사용해야 하기 때문에 InputAction을 새로 만들고 이번에는 Action ValueType을 2D Vector로 만들어준다

 

만든 InputAction을 Input Mapping Context에 추가해준다

 

이때 Input은 Mouse XY 2D-Axis로 지정한다 (MouseX, MouseY를 합친것)

 

 

InputAction 변수, InputAction에 Bind할 함수 선언/구현 후 EnhancedInputComponent로 BindAction해준다

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Input)
UInputAction* LookAction;

void Look(const FInputActionValue& Value);

 

 

void ABird::Look(const FInputActionValue& Value)
{
	const FVector2D LookAxisValue = Value.Get<FVector2D>();

	if (Controller)
	{
		AddControllerYawInput(LookAxisValue.X);
		AddControllerPitchInput(-(LookAxisValue.Y));
	}
}

 

InputAction의 Value가 Vector2D이기 때문에 FInputActionValue.Get<>()도 FVector2D로 해주어야 한다

 

AddControllerPitch/Yaw/RollInput() : PlayerController의 회전값을 Pawn의 회전에 적용시킨다 (Pawn의 bUseControllerRotationPitch/Yaw/Roll = true; 로 해주어야 적용이 가능하다)

 

축 회전값 (float)을 인자로 가진다

 

void ABird::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);
	
	if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
	{
		EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ABird::Look);
	}
}

 

이렇게 Player의 입력을 받아 이동과 회전을 구현할 수 있다

 

 

3. Set Default Pawn

 

우선 GameMode를 만들어야 한다

BP Class의 ParentClass를 GameModeBase로 지정하고 GameMode BP를 생성한다

 

만든 GameMode의 Detail Tab - Classes에서 Default Pawn Class를 원하는 Pawn Class로 지정하면 된다

 

만든 GameMode는 WorldSetting에서 지정해주어야 한다

 

이렇게 지정하게 되면 게임을 시작하자마자 바로 해당 DefaultPawn이 Spawn되고  PlayerController가 Possess하게 된다

(DefaultPawn이 생성되는 위치는 PlayerStart의 위치이다)

 

 

728x90
반응형

'Unreal' 카테고리의 다른 글

13. RotationMatrix  (173) 2024.01.12
12. The Character Class  (95) 2024.01.12
10. The Pawn Class & Enhanced Input System (2)  (28) 2024.01.03
9. The Pawn Class & Enhanced Input System (1)  (67) 2024.01.03
8. The Pawn Class (1)  (179) 2023.12.15