우선 에픽게임즈 마켓플레이에서 필요한 에셋을 다운 받자
Paragon: Greystone을 받아보자(용량이 꽤 커서 받는데 오래걸림)
다운 후 사용중인 프로젝트에 추가하면 됨
이제는 사용되지 않을 StarterContents는 삭제해도 좋음(삭제하는 동안 에러메시지 나오는데 그냥 확인 누르고 에러메시지가 나왔다면 바로 삭제가 안되고 폴더가 남아있는데 다시 삭제하면 삭제 된다)
나만의 캐릭터를 만들어 보자
// 메쉬 지정
AMyCharacter::AMyCharacter()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
static ConstructorHelpers::FObjectFinder<USkeletalMesh> SM(TEXT("SkeletalMesh'/Game/ParagonGreystone/Characters/Heroes/Greystone/Meshes/Greystone.Greystone'"));
if (SM.Succeeded())
{
GetMesh()->SetSkeletalMesh(SM.Object);
}
}
// ...
// 인풋지정
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &AMyCharacter::UpDown);
PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &AMyCharacter::LeftRight);
}
// 게임모드 디폴트 Pawn을 지정
AMyGameModeBase::AMyGameModeBase()
{
DefaultPawnClass = AMyCharacter::StaticClass();
}
실행해 보면 이렇게 캐릭터가 떠있음
카메라 위치를 조금 수정해 보자
UCLASS()
class TESTUNREAL_API AMyCharacter : public ACharacter
{
// ...
private:
UPROPERTY(VisibleAnyWhere)
class USpringArmComponent* SpringArm;
UPROPERTY(VisibleAnyWhere)
class UCameraComponent* Camera;
};
#include "MyCharacter.h"
#include "GameFrameWork/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
// Sets default values
AMyCharacter::AMyCharacter()
{
// ...
// SpringArm, Camera 생성
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
// SparingAram을 현재 캐릭의 Capsule에 붙이고
SpringArm->SetupAttachment(GetCapsuleComponent());
Camera->SetupAttachment(SpringArm); // Camera를 다시 SpringArm에 붙음
SpringArm->TargetArmLength = 500.f;
SpringArm->SetRelativeRotation(FRotator(-35.f, 0.f, 0.f));
// Mesh의 위치를 지정
GetMesh()->SetRelativeLocationAndRotation(
FVector(0.f, 0.f, -88.f), FRotator(0.f, -90.f, 0.f)
);
static ConstructorHelpers::FObjectFinder<USkeletalMesh> SM(TEXT("SkeletalMesh'/Game/ParagonGreystone/Characters/Heroes/Greystone/Meshes/Greystone.Greystone'"));
if (SM.Succeeded())
{
GetMesh()->SetSkeletalMesh(SM.Object);
}
}
마우스에 따라 회전이 들어가게 해보자
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &AMyCharacter::UpDown);
PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &AMyCharacter::LeftRight);
PlayerInputComponent->BindAxis(TEXT("Yaw"), this, &AMyCharacter::Yaw);
}
// ...
void AMyCharacter::Yaw(float value)
{
if (value == 0.f)
return;
AddControllerYawInput(value);
}