반응형
[Unreal/C++] 기본 캐릭터 움직임, 설정 구현
캐릭터에
1. SpringArmComponent, CameraComponent를 추가한다.
2. SkeletalMesh를 변경한다.
3. 키보드의 W, S, A, D키를 받아 X, Y축 이동을 구현한다.
4. 마우스의 움직임을 받아 카메라의 X,Y 축 회전을 구현한다.
먼저 캐릭터를 상속받는 클래스를 만든다.
생성시 기본 형태는 생성자와 BeginPlay, Tick, SetupPlayerInputComponent 함수가 있습니다.
하단에 입력을 받을 함수와 컴포넌트 변수를 선언해줍니다.
// MyCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "DefaultCharacter.generated.h"
UCLASS()
class MAINPROJECT_API ADefaultCharacter : public ACharacter
{
GENERATED_BODY()
public:
ADefaultCharacter();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private :
void OnMoveForward(float Axis);
void OnMoveRight(float Axis);
void OnHorizontalLook(float Axis);
void OnVerticalLook(float Axis);
private :
UPROPERTY(VisibleDefaultsOnly)
class USpringArmComponent* SpringArm;
UPROPERTY(VisibleDefaultsOnly)
class UCameraComponent* Camera;
};
이후 cpp 생성자에서 SpringArm과 Camera를 추가, 설정해줍니다.
mesh는 SkeletalMesh의 레퍼런스 경로를 복사하여 붙여줍니다.
// 생성자 코드
ADefaultCharacter::ADefaultCharacter()
{
PrimaryActorTick.bCanEverTick = true; // 틱을 사용
// SpringArm과 Camera를 추가
// CreateDefaultSubobject는 생성자에서만 사용이 가능합니다.
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
// SpringArm을 루트 컴포넌트 하위 자식으로 붙여줍니다.
// Camera는 SpringArm컴포넌트 하위로 붙여줍니다.
SpringArm->SetupAttachment(RootComponent);
Camera->SetupAttachment(SpringArm);
// SpringArm의 거리를 조정하고, Pawn컨트롤러의 회전을 사용합니다.
SpringArm->TargetArmLength = 500.0f;
SpringArm->bUsePawnControlRotation = true;
// ContructorHelpers또한 생성자에서만 사용 가능합니다.
// SkeletalMesh Object를 찾아 mesh에 넣습니다.
ConstructorHelpers::FObjectFinder<USkeletalMesh> mesh(L"SkeletalMesh'/Game/Characters/TwinBlast/Meshes/TwinBlast_ShadowOps.TwinBlast_ShadowOps'");
verifyf(mesh.Succeeded(), L"mesh.succeeded()");
// mesh를 가져와서 설정해줍니다.
GetMesh()->SetSkeletalMesh(mesh.Object);
// 블루프린트로 캐릭터를 추가해보셨다면 알겠지만 캐릭터의 위치와 회전을 설정해줍니다.
GetMesh()->SetRelativeLocation(FVector(0, 0, -90));
GetMesh()->SetRelativeRotation(FRotator(0, -90, 0));
}
키보드와 마우스의 입력을 받기 위해 SetupPlayerInputComponent에 코드를 추가합니다.
// MyCharacter.cpp
void ADefaultCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 프로젝트 셋팅 -> 입력에서 추가한 축 이름과 호출될 함수를 설정합니다.
PlayerInputComponent->BindAxis("MoveForward", this, &ADefaultCharacter::OnMoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &ADefaultCharacter::OnMoveRight);
PlayerInputComponent->BindAxis("HorizontalLook", this, &ADefaultCharacter::OnHorizontalLook);
PlayerInputComponent->BindAxis("VerticalLook", this, &ADefaultCharacter::OnVerticalLook);
}
// MyCharacter.cpp
// 헤더에 추가했던 함수를 구현해줍니다.
void ADefaultCharacter::OnMoveForward(float Axis)
{
FRotator rotator = FRotator(0, GetControlRotation().Yaw, 0);
FVector direction = FQuat(rotator).GetForwardVector().GetSafeNormal2D();
AddMovementInput(direction, Axis);
}
void ADefaultCharacter::OnMoveRight(float Axis)
{
FRotator rotator = FRotator(0, GetControlRotation().Yaw, 0);
FVector direction = FQuat(rotator).GetRightVector().GetSafeNormal2D();
AddMovementInput(direction, Axis);
}
void ADefaultCharacter::OnHorizontalLook(float Axis)
{
AddControllerYawInput(Axis);
}
void ADefaultCharacter::OnVerticalLook(float Axis)
{
AddControllerPitchInput(Axis);
}
플레이어 입력 설정하기
편집->프로젝트셋팅->엔진->입력->축매핑 +버튼을 눌러 추가
축 매핑 이름은 Input 연결에 사용됩니다.
Skeletal Mesh 레퍼런스 경로 복사
Skeletal Mesh를 찾아 우클릭->레퍼런스 복사
반응형
'Unreal > Manual' 카테고리의 다른 글
Unreal 캐릭터 걷기, 뛰기, 전력질주 Blend Space 구현 (0) | 2023.11.22 |
---|---|
Unreal C++ AnimInstance 구현 (0) | 2023.11.22 |
Unreal C++ DefaultPawnClass 변경 하기 (1) | 2023.11.22 |
Unreal C++ 캐릭터 SkeletalMesh 변경하기 (1) | 2023.11.22 |
Unreal C++ UCameraComponent 컴포넌트 추가 (1) | 2023.11.22 |