티스토리 뷰

사용 버전) 언리얼 5.0.2

 

먼저 생성한 C++ Class는 Character를 생성하였습니다. 그 후, C++ 코드를 작성하여 캐릭터에 SkeltonMesh를 입히고, SpringArm을 통해서 카메라를 달았습니다. 아래의 사진과 코드를 통해서 차례대로 알아보겠습니다.

 

SkeltonMesh 입히기

  • 콘텐츠 브라우저에 본인이 설치하신 SkeltonMesh를 선택후, Ctrl + C 를 누르시면 경로가 자동으로 복사가 됩니다. 그리고 그냥 코드를 통해서 SkeltonMesh를 입히시면 됩니다. API는 모두 언리얼에서 제공하므로, 함수만 사용하시면 됩니다. 코드는 밑에 총괄 코드를 통해 참고 부탁드리겠습니다.

 

SpringArm + Camera 세팅

  • 1. 먼저 언리얼에서 세팅-> 프로젝트 세팅 -> 입력에 들어가서 아래의 사진과 같이 세팅합니다.

  • 2. 그 후, 코드를 작성해야 합니다. 코드의 정확한 내용은 주석을 참고해주시면 감사하겠습니다.

 

헤더파일

더보기
UCLASS()
class STARTUNREALENGINE4_API AMyCharacter : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AMyCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
	UFUNCTION()
	void UpDown(float value);

	UFUNCTION()
	void LeftRight(float value);

	UFUNCTION()
	void Yaw(float value);

	UFUNCTION()
	void Pitch(float value);

private:
	UPROPERTY(VisibleAnywhere)
	class USpringArmComponent* SpringArm;
	
	UPROPERTY(VisibleAnywhere)
	class UCameraComponent* Camera;
};

 

소스코드

더보기
// Fill out your copyright notice in the Description page of Project Settings.


#include "MyCharacter.h"
#include <GameFramework/SpringArmComponent.h>
#include <Camera/CameraComponent.h>
#include <Components/CapsuleComponent.h>

// Sets default values
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;

	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SPRINGARM"));
	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("CAMERA"));
	
    //캐릭터에 Arm 세팅
	SpringArm->SetupAttachment(GetCapsuleComponent());
    
    //Arm에다가 카메라 세팅
	Camera->SetupAttachment(SpringArm);
	
    //길이 세팅
	SpringArm->TargetArmLength = 500.f;
    //Arm의 방향 세팅
	SpringArm->SetRelativeRotation(FRotator(-35.f, 0.f, 0.f));
	SpringArm->bUsePawnControlRotation = true;

	GetMesh()->SetRelativeLocationAndRotation(
		FVector(0.f, 0.f, -88.f), FRotator(0.f, -90.f, 0.f));
	
	//경로에 있는 SkeltonMesh 가져옴.
	static ConstructorHelpers::FObjectFinder<USkeletalMesh> SM(TEXT("SkeletalMesh'/Game/ParagonYin/Characters/Heroes/Yin/Meshes/Yin.Yin'"));

	//만약 성공시 가져온 SkeltonMesh를 캐릭터에 입힘.
	if (SM.Succeeded()) {
		UE_LOG(LogTemp, Warning, TEXT("Mesh Success"));
		GetMesh()->SetSkeletalMesh(SM.Object);
	}
}

// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void AMyCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);
	
    //TEXT에 있는 값과 프로젝트 세팅에, 입력에 있는 값의 이름이 같아야함.
	PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &AMyCharacter::UpDown);
	PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &AMyCharacter::LeftRight);
	PlayerInputComponent->BindAxis(TEXT("Yaw"), this, &AMyCharacter::Yaw);
	PlayerInputComponent->BindAxis(TEXT("Pitch"), this, &AMyCharacter::Pitch);
}

void AMyCharacter::UpDown(float value)
{
	if (value == 0.f)
		return;

	//캐릭터 앞뒤 움직임
	//UE_LOG(LogTemp, Warning, TEXT("UpDown %f"), value);
	AddMovementInput(GetActorForwardVector(), value);
}

void AMyCharacter::LeftRight(float value)
{
	if (value == 0.f)
		return;
     
	//캐릭터 양옆 움직임
	//UE_LOG(LogTemp, Warning, TEXT("LeftRight %f"), value);
	AddMovementInput(GetActorRightVector(), value);
}

void AMyCharacter::Yaw(float value)
{
	//마우스 좌우(X축) 움직이는 코드
	AddControllerYawInput(value);
}

void AMyCharacter::Pitch(float value)
{
	//마우스 위아래(Z축) 움직이는 코드
	AddControllerPitchInput(value);
}

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함