언3 에서 미리 정의되어 있는 카메라의 종류 및 구조에 대해 개략적으로 살펴본다.
PlayerController 에서 CameraClass 를 선언할 수 있다.
class PlayerController extends Controller ... var const class<Camera> CameraClass; // PlayerController 가 사용할 카메라 이름
Engine 이 제공하는 Camera.uc 의 역할은 다음과 같다.
중요한 것은 이 정도이고 나머지는 알아서 찾아보자.
Engine 이 제공하는 Camera 클래스만으로도 게임에 활용할 수 있겠지만 GameFramework 레이어가 제공하는 여러 Camera 관련 도움 클래스들을 이용하면 다양한 기능이 구현 가능하다. (물론 직접 구현하겠다면야 )
class GamePlayerCamera extends Camera
GamePlayerCamera 는 다음의 기능을 가지고 있다.
중요한 것은 이 정도인데 여기서 핵심은 첫번째 내용이다. 이 놈을 상속받아 원하는 Camera Type 을 여러개 추가한 후 상황에 맞게 바꿔쓸 수 있다.
예를 들어 플레이어에 붙어다니도록 구현된 ThirdPersonCam 과 CameraActor 에 붙어서 따라다니도록 구현된 FixedCamera (이들은 Engine 기본 제공) 중 원하는 것을 선택하여 사용할 수 있다.
FindBestCameraType 함수를 상속받으면 원하는 Type 의 카메라를 선별하는 방식을 정의할 수 있다.
위에서 (카메라) Type 에 대해서 잠깐 언급 하였다. GamePlayerCamera 는 두가지 Type 의 카메라세팅을 가지고 있는데
... var(Camera) editinline transient GameCameraBase ThirdPersonCam; // 플레이어를 따라다니는 카메라 var(Camera) editinline transient GameCameraBase FixedCam; // 특정 장소에 고정되어 사용되는 카메라
보면 알겠지만 Type 으로 표현한 클래스는 GameCameraBase 를 상속받아 구현하게 된다. 역시 GameFramework 가 제공하는 기본 Type 두 가지가 있다.
class GameThirdPersonCamera extends GameCameraBase ...
기능은 다음과 같다.
느낌이 왔겠지만 중요한 것은 세번째다. 위 GamePlayerCamera 가 여러 Type 을 거닐었듯이 이 GameThirdPersonCamera 라는 Type 은 여러 Mode 들을 거닐고 원하는 놈을 택하여 사용한다. 대략 코드를 보자.
... var() proptected editinline GameThirdPersonCameraMode ThirdPersonCamDefault; // 기본 Mode ... function GameThirdPersonCameraMode FindBestCameraMode( Pawn P ) { ... return WantedMode; }
이 클래스에선 Mode 가 (리스트리 되어있지 않고) 하나 뿐이지만 실제론 다양한 모드들이 있을 수 있겠다.
이해를 돕기 위해 아래와 같은 Mode 들이 추가될 수 있다. (실제 GoW2 및 GoW3 에서 사용 예)
각각의 Mode 는 일종의 설정값들을 가지고 있는 구조체라고도 볼 수 있다.1)
백문이 불여일견
class GameThirdPersonCameraMode extends Object ... var transient config float FOVAngle; // FOV var() float BlendTime; // 이 Mode 로 진입할 때의 blend in 시간 var() const protected bool bLockedToViewTarget; // ViewTarget 만 보도록 lock 걸 것인가? ... // 그 외 loc / rot 에 대한 spring, origin 으로부터의 offset 등 대표될만한 camera 속성들.
여러분이 생각하는 바로 그런 속성들이 Mode 에 존재한다.
class GameFixedCamera extends GameCameraBase ...
기능은 다음과 같다.
위 기능밖에 없다.
이해를 돕기 위해 TPS 게임에 대응하여 표현해 보았다.