
2D, 3D 게임을 할 때 Player의 위치가 변함에 따라 camera가 Player를 따라가줘야 한다. Main Camera가 Player를 쫓아가지 못한다면 Player는 유저의 입력에 따라 이동하지만, 화면이 이를 따라가지 못해 유저의 화면에서 Player가 벗어나게 되는 오류가 생긴다.
Unity에서 정의하는 Camera는 다음과 같다.

"MainCamera"라는 tag를 가진 component이며, "MainCamera"라는 tag로 활성화된 camera가 없다면 Camera.main은 null 값을 가진다.

Unity의 모든 프로젝트에는 기본적으로 Hierarchy에 Main Camera와 Global Light가 존재한다.
Main Camera가 바로 Game 실행 시 보이게 되는 유저의 게임 시점이다.
Player의 움직임에 따라 Main Camera가 Player의 동선과 동일하게 움직여야 한다는 점을 주의하자.
using UnityEngine;
public class Driver : MonoBehaviour
{
[Header("Settings")]
[SerializeField] private float steerSpeed;
[SerializeField] private float moveSpeed;
[SerializeField] private float steerAmount;
[SerializeField] private float moveAmount;
[Header("References")]
[SerializeField] private Camera mainCamera;
void Start()
{
if (mainCamera == null)
{
mainCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>(); // Main Camera 할당
}
}
void LateUpdate()
{
// 카메라 따라 움직임
mainCamera.transform.position = this.transform.position + new Vector3(0, 0, -30);
}
void Update()
{
// 기본 움직임 (좌우, 상하)
steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime; // 좌우 무빙 키보드 입력
moveAmount = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime; // 상하
transform.Rotate(0, 0, -steerAmount); // steering 조향각 조정
transform.Translate(0, moveAmount, 0);
}
}
위의 Main Camera를 할당하는 코드를 먼저 살펴보자.
void Start()
{
if (mainCamera == null)
{
mainCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
}
Start() 에서 mainCamera가 할당되어 있지 않다면, "MainCamera"라는 tag를 가진 GameObject의 Camera Component를 찾아 할당해준다.
void LateUpdate()
{
mainCamera.transform.position = this.transform.position + new Vector3(0, 0, -30);
/*
* 이하 코드 생략
*/
}
이후 mainCamera의 position을 Player의 이동에 맞춰 동일하게 움직여주는 과정이 필요하다.
여기서 this는 현재 script를 할당해준 GameObject를 나타내며, this = Player GameObject이다.
Player의 position에서 z값만 더해주어 Player의 이동 동선과 동일하게 움직이는 Camera를 설정할 수 있다.
< z값 더해주는 이유 - 시각적 설명 >

Main Camera의 z값이 -60, Player (Car 2_0)의 z값이 -30으로, 초기 상태에서 z값이 -30만큼 차이나기 때문에

옆에서 봤을 때 camera와 Player가 수직으로 연결되어 같이 움직인다고 생각하면 쉽게 이해된다.
