Programing/Unity(C#)

[Unity] Cinemachine으로 플레이어를 따라오는 카메라 설정하기(2D, Projection: Orthographic)

hye3193 2024. 8. 7. 18:36

많은 게임들에서 기본적으로 카메라가 플레이어를 계속 따라다니며 진행되는데, Cinemachine이라는 컴포넌트를 활용해 쉽게 구현해 볼 수 있다

 

우선 기본적으로 설치되어 있는 패키지가 아니기 때문에, Window > Package Manager로 들어가 검색창에 Cinemachine을 검색해서 설치해 준다

 

만약 검색했는데 패키지가 뜨지 않는다면, Packages가 In Project가 아닌 Unity Registry로 체크되어 있는지 확인하자

 

설치가 끝났으면 Hierarchy 창에서 우클릭 후 Cinemachine > 2D Camera를 선택해서 추가해 준다

 

Virtual Camera라고 이름 붙어 새로 생긴 오브젝트를 보면 CinemachineVirtualCamera라는 컴포넌트가 있는데, 이곳의 Follow에 플레이어를 넣어 주면 카메라가 플레이어를 따라 다니며 화면을 출력하게 된다

 

플레이어 오브젝트를 그냥 드래그 앤 드롭 해서 넣어도 되고,

public class CameraController : MonoBehaviour
{
    PlayerController player;

    private void Start()
    {
        player = FindObjectOfType<PlayerController>();
        GetComponentInChildren<CinemachineVirtualCamera>().Follow = player.transform;
    }
}

이런 식으로 스크립트를 하나 작성해서 붙여주어도 된다(Camera Controller는 Main Camera에 붙은 스크립트이다)

 

플레이어를 따라오게 설정하긴 했으나, 플레이어를 따라오다 보니 카메라가 자꾸 맵 바깥쪽을 비추는 문제가 생긴다

플레이어의 이동 범위는 Collider 등을 넣어 제어했으나, 카메라는 이에 충돌하지 않아 따로 설정해 주어야 한다

 

아까 봤던 Virtual Camera 오브젝트의 CinemachineVirtualCamera 컴포넌트 맨 아래쪽에 보면 Add Extension이 있는데, 여기서 CinemachineConfiner2D를 선택해서 컴포넌트를 추가해 준다

 

그럼 이런 컴포넌트가 추가되는데, 이곳의 Bounding Shape 2D에 Collider를 넣어 주면 된다

 

Collider는 그냥 Empty Obejct 하나 만든 뒤, Polygon Collider2D를 추가해서 카메라가 나가지 않을 범위를 설정해 주면 된다

이때, Confiner 2D를 사용할 때에는 PolygonCollider2D 혹은 CompositeCollider2D 컴포넌트만 대입이 가능하다

BoxCollider2D 등을 사용하면 적용이 되지 않으니 주의하자

 

마찬가지로 콜라이더를 그냥 드래그 앤 드롭을 해도 되고, 게임을 시작하면서 범위를 지정해 주어야 하는 경우

Camera.main.transform.GetChild(0).GetComponent<CinemachineConfiner2D>.m_BoundingShape2D = {오브젝트의 Collider 컴포넌트}

이런 식으로 코드로 넣어주어도 된다

(나의 경우 Virtual Camera를 Main 카메라의 자식에 넣어뒀기 때문에 위치가 저렇지만, 만일 Main 카메라와 Virtual Camera가 별개로 존재한다면 그냥 Virtual Camera를 찾아서 설정을 변경해 주면 된다)

 

3D 카메라 세팅: https://hye3193.tistory.com/155