본문 바로가기
Unreal Engine/[Inflearn_rookiss] UE5 Lyra 분석

10. Camera의 부분적 구현

by 헛둘이 2024. 10. 12.

Lyra의 카메라는 크게 3개의 뼈대로 구성됩니다.

 

1. HmPlayerCameraManager

- 실제 렌더링에 관여하는 매니저입니다.

이 클래스는 PlayerController에서 관리되며, CameraComponent에서 받아온 값을 통해 화면을 렌더링하는 역할을 합니다.

현재는 FOV나 PtichMin, PitchMax와 같은 설정값에 대해서 세팅되어 있습니다.

* FOV란? Field of view, 시야각을 의미합니다.

* Pitch는 시점의 위, 아래 회전량을 의미하며, 이 값을 제한함으로써 마우스를 위로 올렸을 때 뒤가 보이지 않도록 각도를 조정합니다.

 

2. HmCameraComponent

- HmPlayerCameraManager에 캐릭터의 시점에 대한 정보를 전달합니다.

- World Tick을 따라가지 않고 PlayerCameraManager Tick을 따라가는 것이 알아두어야 할 정보입니다.

- InitState_DataAvailable 상태에서 InitState_DataInitialized 상태로 넘어갈 때 HeroComponent로부터 Delegate가 바인딩됩니다.

- 매 틱마다 Delegate를 통해 HeroComponent에서 바안딩된 DetermineCameraMode를 호출합니다.

TSubclassOf<UHmCameraMode> UHmHeroComponent::DetermineCameraMode() const
{
	const APawn* Pawn = GetPawn<APawn>();
	if (!Pawn)
	{
		return nullptr;
	}

	if (UHmPawnExtensionComponent* PawnExtComp = UHmPawnExtensionComponent::FindPawnExtensionComponent(Pawn))
	{
		if (const UHmPawnData* PawnData = PawnExtComp->GetPawnData<UHmPawnData>())
		{
			return PawnData->DefaultCameraMode;
		}
	}

	return nullptr;
}

- DetermineCameraMode는 PawnData에 설정된 카메라 모드를 반환합니다.

 

3. HmCameraMode

- CameraMode는 3인칭 액션, 스나이퍼 모드, 차량 탑승 모드 등 여러 모드들에 대한 카메라 시점을 추상화한 클래스입니다.

- CameraMode는 말 그대로 추상 클래스라 UCLASS(Abstract, Blueprintable)로 구성되어 상속 받아야 사용할 수 있도록 되어 있으며, 실제로 CameraMode_ThirdPerson과 같은 형태로 파생됩니다.

- 블루프린트 클래스 접두사로는 CM_를 사용하게 됩니다.

 

* CameraModeStack

- 이 클래스는 카메라의 시점이 변경될 때 두 카메라 시점을 적절히 블렌딩해주는 클래스입니다.

- D3D 프로젝트에서 시네마틱 카메라를 구현할 때 시점이 변경되면 카메라의 움직임을 선형보간해서 구현했었는데 

마찬가지로 차 안에 타고 있다가 스나이퍼 모드로 변경될 때 갑자기 바뀌면 어색하기도 하고  3D 멀미를 유발할 수 있기 때문에 모드들을 매 프레임 쌓아두고 보간하여 보여주는 역할을 합니다.

- 이 클래스는 CameraComponent에서 멤버 변수로 들고 있는데 어떻게 사용할 지는 추후 강의에서 공개될 듯 합니다.

 

'Unreal Engine > [Inflearn_rookiss] UE5 Lyra 분석' 카테고리의 다른 글

12. InputComponent 완료  (0) 2024.10.19
11. Camera Blending과 Update  (1) 2024.10.13
9. Pawn Extension 및 Init State 내용 정리  (0) 2024.10.11
8. Pawn Extension_2  (0) 2024.10.08
7. Pawn Extension  (1) 2024.10.07

댓글