Unreal Engine

카메라 세팅

Awesome Red Tomato 2023. 7. 6. 17:43

버전: 4.26.2

 

프로젝트 생성

Games -> Blank -> C++, Maximum Quility, Raytacing Enable, Desktop/Console, No Starter Content

 

 

 

프로젝트를 생성하면 컨텐츠 브라우저에 위와 같이 GameModeBase 하나가 생긴다. 게임모드는 게임의 전반적인 형식과 룰을 담는 클래스다.

 

캐릭터를 따라다니는 카메라

 

// CharacterBase.h
private:
	/** 캐릭터와 카메라 사이에 배치할 SpringArm */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	USpringArmComponent* SpringArm;

	/** 캐릭터를 따라다니는 카메라 */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	UCameraComponent* Camera;

public:
	/** SpringArm 컴포넌트 리턴 */
	FORCEINLINE USpringArmComponent* GetSpringArm() const { return SpringArm; }
	
	/** 카메라 컴포넌트 리턴 */
	FORCEINLINE UCameraComponent* GetCamera() const { return Camera; }

 

// Sets default values
ACharacterBase::ACharacterBase()
{
 	// 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 초기화
	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	SpringArm->SetupAttachment(GetRootComponent());
	SpringArm->TargetArmLength = 300.0f;		// 카메라와 캐릭터 사이 거리 = 300.0f
	SpringArm->bUsePawnControlRotation = true;	// 컨트롤러에 따라 회전

	// Camera 초기화
	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);
	Camera->bUsePawnControlRotation = false;	// 카메라 회전을 막아놓는다.
}

 

FORCEINLINE 

inline 은 별도의 코드 블록을 구현해 함수를 호출하지 않고 곧바로 구현 코드를 작성하는 방법이다. 일반적으로 #define 매크로보다 안전하다. 

  • inline: 컴파일 단계에서 처리됨. 수행 시 타입 검사가 적용됨.
  • define: 전처리 단계에서 치환됨. 대치 시 어떠한 타입 검사가 이루어지지 않음.

 

inline int sum(int a, int b)
{
	return a + b;
 }

 

이 코드를 컴파일 할 경우, sum함수 호출 부분이 블록 안 코드로 대체될 것이다. 이는 함수 호출 시 발생하는 오버헤드를 줄이기 위함이다.

오버헤드: 특정 기능을 수행하는데 드는 처리시간, 메모리 자원 등

 

 

그럼 inline과 FORCEINLINE의 차이는 무엇일까.

 

C++에서 inline은 컴파일러에게 함수를 인라인화 할 것을 '요청'한다. 이는 명령이나 강제가 아니기에 복잡한 함수나 가상 함수는 컴파일러에서 인라인화를 해주지 않는다. 반면 FORCEINLINE은 말 그대로 Force + Inline, 강제로 인라인화 시킨다.