[ Survival Shooter 4 ] TPS 게임에서의 카메라 컨트롤

TPS게임에서의 카메라 조정 방식은 어느 게임에서나 비슷한 방식으로 작동하므로, 이번기회에 공부해둔다면 앞으로 많은 도움이 될것이고, 어느 유니티 입문서를 보아도 앞장에 항상 소개되는 내용이다. 한번 알아보도록 하겠다.

 MainCamera : 사용자가 보는 화면을 관리하는 오브젝트이다.
컴포넌트는 About Unity 카테고리에서 분석하도록 하고, 여기서는 Script 위주로 살펴보겠다. 먼저 CameraFollow Script 는 다음과 같다.
핵심 기능은 FixedUpdate의 Transform.position = Vector3.Lerp 부분으로, 해당 컴포넌트가 포함된 transform 컴포넌트의 position 속성을 Vector3.Lerp 메서드를 통해 선형보간하여 이동하고 있다. 선형보간이 무엇인지는 수학카테고리에서 알아보도록하고, 일단은 함수의 원형과 기능만 알아보자

public static Vector3 Lerp(Vector3 aVector3 b, float t); 
a와 b를 t 로 보간하는데 t는 [0,1] 범위이다. t가 0에 가까울수록 a, 1에 가까울수록 b에 가까운 벡터을 반환하는데,
 
현재 프로젝트에서 t의 값을 출력하면 (smoothing*Time.deltatime) 0.09 로 transform.position 와 targetCampos, 사이의 위치를 계속 반환하여 다시 trasnform.position에 넣고 있다.
a는 transform.position은 Player가 보는 화면을 결정하는 Main Camera 의 위치
b는 targetCamPos 즉, target.position에서 offset 만큼의 거리를 더한 값이다. target.position 은 Player Object의 position 이고,
offset 은 tarnsform.position - target.position , 즉 카메라위치와 Player위치의 거리를 나타내는데 offset은 왜 있는 것일까?

먼저 Player와 MainCamera의 초기 위치는 다음과 같다.









offset 를 target.position에 더하는 것은 게임을 실행하였을때 Lerp함수가 실행되고 다음과 같은 효과를 낸다

offset 만큼 더했을때 카메라위치
offset만큼 더하지 않았을때 카메라 위치 (Player Object와 겹침)

즉, 처음에 MainCamera와 Player의 거리에 offset만큼 더해서 최종 targetCamPos 를 정하는 과정이 없다면, 결국 카메라는 Lerp함수에 의해 아예 Player와 붙어서 이동할 것이기 때문이다. 따라서 초기 카메라 Position을 사용자가 보기 편한 위치로 옮겨놓고 이 값을 이용해 거리를 적당히 벌리는것이다.

결과적으로, Lerp 함수는 실제 게임에 아래와 같은 영향을 미친다
카메라가 Player Object를 바짝 따라붙지 않고 텀을 두고 이동하는게 느껴지는가? 즉, 더욱 부드러운 카메라 연출을 할수있다.

마지막으로 값이 1에 가까울수록 벡터b에 더 가까운 벡터를 반환한다는 사실을 기억하자. smooth는 값을 줄일수록 t 값이 작아져서 벡터a 에 더 가까운 벡터를 반환하는데, 벡터a는 카메라의 좌표이므로 카메라가 더욱 시간차를 두고 이동하게 된다.


smooth 값 1 일 때


반대로 값을 올린다면 t값이 커져서 더욱 Player Object에 바짝바짝 따라붙을 것이다. 아래에서 확인해보자.


smooth 값 10일 때

Camera Follow 밑에 PostProcessing Behaviour 라는 Script 는 영상의 후처리를 담당하는 Script 이다. Script 라기 보다는 Component 에 가까우며 자세한 내용은 About Unity 카테고리에서 따로 정리하도록 하겠다.