Unity에서 팔로우 카메라 설정하기: 차량 추적과 화면 중앙 유지

GoGoComputer·2024년 10월 28일

unity2d game

목록 보기
13/17
post-thumbnail

Unity에서 이동하는 차량을 따라다니는 팔로우 카메라를 설정하는 방법을 자세히 알아보겠습니다. 이 기능은 플레이어의 움직임을 따라 카메라가 자연스럽게 이동하도록 만들어 게임의 몰입감을 높여줍니다.

목표: 차량이 게임 내에서 이동할 때, 카메라가 해당 차량을 지속적으로 따라가며 화면 중앙에 위치시키는 것입니다.

1. 프로젝트 준비

먼저 Unity 프로젝트를 열고, 차량(GameObject)과 메인 카메라가 씬(Scene)에 배치되어 있는지 확인합니다.

  • 차량(GameObject): 이동하는 대상입니다.
  • 메인 카메라(Main Camera): 화면에 보여질 장면을 촬영하는 역할을 합니다.

2. 메인 카메라 위치 확인

  1. Hierarchy 창에서 Main Camera를 선택합니다.

  1. 씬 뷰(Scene View)에서 이동 툴(Move Tool)을 사용하여 카메라의 위치를 조정해보세요.

    • 단축키 W를 누르면 이동 툴이 활성화됩니다.

  2. 카메라의 위치를 변경하면 게임 뷰(Game View)에서 보이는 화면이 어떻게 달라지는지 확인합니다.

이 과정에서 카메라의 위치가 게임에 어떤 영향을 미치는지 이해할 수 있습니다.

3. 팔로우 카메라 스크립트 생성

카메라가 차량을 따라다니게 하기 위해서는 스크립트를 작성해야 합니다.

  1. Project 창에서 Assets 폴더를 우클릭합니다.
  2. Create > C# Script를 선택합니다.
  3. 스크립트의 이름을 FollowCamera로 지정합니다.
    • 대문자로 시작하는 FollowCamera로 명명합니다.
  4. 생성된 스크립트를 더블 클릭하여 Visual Studio 또는 기본 코드 에디터에서 엽니다.

4. 스크립트 작성

이제 카메라가 차량을 따라가도록 스크립트를 작성해보겠습니다.

4.1. 변수 선언

먼저, 카메라가 따라갈 대상을 지정하기 위한 변수를 선언합니다.

using UnityEngine;

public class FollowCamera : MonoBehaviour
{
    [SerializeField] GameObject thingToFollow;
}
  • [SerializeField]: 이 속성을 사용하면 private 변수도 Inspector 창에서 수정할 수 있습니다.
  • GameObject thingToFollow: 카메라가 따라갈 대상인 차량을 참조합니다.

4.2. LateUpdate 메서드 사용

카메라의 위치를 차량의 위치에 맞춰 업데이트하기 위해 LateUpdate() 메서드를 사용합니다.

void LateUpdate()
{
    transform.position = thingToFollow.transform.position + new Vector3(0, 0, -10);
}
  • transform.position: 카메라의 현재 위치를 의미합니다.
  • thingToFollow.transform.position: 따라갈 대상(차량)의 위치를 의미합니다.
  • new Vector3(0, 0, -10): 카메라가 차량과의 거리를 유지하기 위한 오프셋입니다.
    • 여기서 Z축 방향으로 -10만큼 떨어지게 설정합니다.

4.3. 전체 코드

최종적으로 작성된 스크립트는 다음과 같습니다.

using UnityEngine;

public class FollowCamera : MonoBehaviour
{
    [SerializeField] GameObject thingToFollow;

    void LateUpdate()
    {
        transform.position = thingToFollow.transform.position + new Vector3(0, 0, -10);
    }
}

5. 스크립트 적용 및 설정

작성한 스크립트를 Unity 에디터로 돌아가서 적용해보겠습니다.

  1. Hierarchy 창에서 Main Camera를 선택합니다.
  2. Inspector 창에서 Add Component를 클릭하고, FollowCamera 스크립트를 추가합니다.
  3. FollowCamera 스크립트의 Thing To Follow 필드에 따라갈 대상인 차량(GameObject)를 드래그하여 넣습니다.

6. 실행 및 확인

이제 모든 설정이 완료되었습니다. 게임을 실행하여 카메라가 차량을 잘 따라다니는지 확인해보세요.

  • Play 버튼을 눌러 게임을 실행합니다.
  • 차량을 움직여보면 카메라가 차량을 지속적으로 따라다니며 화면 중앙에 유지되는 것을 볼 수 있습니다.

7. 추가 설명

7.1. LateUpdate()를 사용하는 이유

  • Update() 메서드는 매 프레임마다 호출되어 게임 로직을 처리합니다.
  • LateUpdate() 메서드는 모든 Update() 처리가 끝난 후 호출되며, 주로 카메라 추적과 같이 다른 객체의 이동 후에 처리해야 할 로직에 사용됩니다.
  • 따라서 카메라의 위치를 LateUpdate()에서 업데이트하면, 차량의 이동이 모두 처리된 후 카메라가 위치를 조정하므로 더욱 부드럽게 따라다니게 됩니다.

7.2. 오프셋 설정

  • 카메라와 차량이 정확히 같은 위치에 있게 되면, 카메라가 차량 내부에 위치하게 되어 올바른 시야를 확보할 수 없습니다.
  • 따라서 new Vector3(0, 0, -10)과 같이 오프셋을 주어 적절한 거리를 유지합니다.
    • 여기서 Z축 방향으로 -10만큼 떨어지게 설정한 이유는 2D 게임에서 카메라는 일반적으로 Z축이 -10인 위치에 배치되기 때문입니다.

7.3. 변수의 하드코딩

  • 코드 내에 숫자 -10을 직접 입력하는 것은 하드코딩(hard-coding)입니다.
  • 이는 작은 프로젝트에서는 큰 문제가 되지 않지만, 규모가 큰 프로젝트에서는 유지보수가 어려워질 수 있습니다.
  • 필요에 따라 이 값을 변수로 선언하여 Inspector에서 조정 가능하도록 만드는 것도 좋습니다.

예를 들어:

[SerializeField] float cameraOffsetZ = -10f;

void LateUpdate()
{
    transform.position = thingToFollow.transform.position + new Vector3(0, 0, cameraOffsetZ);
}

이렇게 하면 Inspector에서 Camera Offset Z 값을 쉽게 변경할 수 있습니다.

8. Unity의 실행 순서 이해

Unity에서 스크립트의 실행 순서를 이해하면 더 효율적인 코드를 작성할 수 있습니다.

  • Awake(): 모든 초기화가 이루어지기 전에 호출됩니다.
  • Start(): 첫 번째 프레임이 업데이트되기 전에 호출됩니다.
  • Update(): 매 프레임마다 호출됩니다.
  • LateUpdate(): 모든 Update() 메서드 호출 후에 호출됩니다.
  • FixedUpdate(): 물리 연산을 위해 고정된 시간 간격으로 호출됩니다.

이러한 실행 순서를 이해하면, 언제 어떤 메서드에서 로직을 처리해야 하는지 결정하는 데 도움이 됩니다.

9. 완성된 코드

마지막으로, 모든 내용을 반영한 완성된 FollowCamera 스크립트는 다음과 같습니다.

using UnityEngine;

public class FollowCamera : MonoBehaviour
{
    [SerializeField] GameObject thingToFollow;
    [SerializeField] float cameraOffsetZ = -10f;

    void LateUpdate()
    {
        transform.position = thingToFollow.transform.position + new Vector3(0, 0, cameraOffsetZ);
    }
}

이 스크립트는 카메라가 지정한 대상을 따라가며, Z축 오프셋을 통해 적절한 거리를 유지합니다.

결론

이렇게 해서 Unity에서 차량을 따라다니는 팔로우 카메라를 설정하는 방법을 알아보았습니다. 이번 예제에서는 기본적인 따라가기 기능을 구현했지만, 필요에 따라 카메라의 움직임을 부드럽게 만들거나 회전을 추가하는 등 다양한 확장이 가능합니다.

Tip: Unity의 Cinemachine 플러그인을 사용하면 더욱 강력하고 다양한 카메라 기능을 손쉽게 구현할 수 있습니다. 나중에 여유가 생기면 Cinemachine을 활용해 보는 것도 좋습니다.

여러분의 게임 개발에 도움이 되길 바라며, 즐거운 개발 되세요!

profile
IT를 좋아합니다.

0개의 댓글