Pawn, Camera, Character Movement 등 Character가 회전 및 움직이는데 들어가는 설정들이 너무 분산화 되어있다.
Data Asset Class를 만들어서 이렇게 분산되어 있는 설정들을 한곳에 모아 관리해보자.
DataAsset에 기능이 조금 더 확장된 PrimaryDataAsset 클래스를 만들어보자.
// Primary DataAsset으로 만든 View 관련 Class
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "ABCharacterControlData.generated.h"
/**
*
*/
UCLASS()
class ARENABATTLE_API UABCharacterControlData : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
UABCharacterControlData();
UPROPERTY(EditAnywhere, Category = Pawn)
uint32 bUseControllerRotationYaw : 1;
UPROPERTY(EditAnywhere, Category = CharacterMovement)
uint32 bOrientRotationToMovement : 1;
UPROPERTY(EditAnywhere, Category = CharacterMovement)
uint32 bUseControllerDesiredRotation : 1;
UPROPERTY(EditAnywhere, Category = CharacterMovement)
FRotator RotationRate;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input)
TObjectPtr<class UInputMappingContext> InputMappingContext;
UPROPERTY(EditAnywhere, Category = SpringArm)
float TargetArmLength;
UPROPERTY(EditAnywhere, Category = SpringArm)
FRotator RelativeRotation;
UPROPERTY(EditAnywhere, Category = SpringArm)
uint32 bUsePawnControlRotation : 1;
UPROPERTY(EditAnywhere, Category = SpringArm)
uint32 bInheritPitch : 1;
UPROPERTY(EditAnywhere, Category = SpringArm)
uint32 bInheritYaw : 1;
UPROPERTY(EditAnywhere, Category = SpringArm)
uint32 bInheritRoll : 1;
UPROPERTY(EditAnywhere, Category = SpringArm)
uint32 bDoCollisionTest : 1;
};
이렇게 CPP 클래스를 만들면, 각 변수의 UPROPERTY의 속성값들을 EditAnywhere로 만들어 놓았으므로, Unreal Engine에서 이 클래스를 상속하는 BP를 만들어서 손쉽게 Top/Shoulder view를 구현할 수 있다.
각각의 View에 따라서 Move함수와 Look함수를 다르게 구현되어야 한다.