반응형

 

 

 

"시네머신(Cinemachine)"

 

 

 

개발을 하다 보면 카메라가 플레이어를 따라오게 만드는 것 자체는 어렵진 않다.
하지만 흔들림, 컷씬, 조준/줌, 충돌 처리처럼 카메라가 ‘연출’을 해야 하는 순간이 온다.

 

 

처음에는 'Camera.transform...' 같은 코드로도 간단히 해결할 수 있다.
다만 기능이 늘어날수록 코드가 복잡해지고, 결국 카메라가 시네마틱하게 움직여야 하는데
 이때 가장 많이 쓰는 도구가 시네머신(Cinemachine)이다.

 


시네머신은 타겟 추적, 구도(프레이밍), 샷 전환/블렌딩 같은 카메라 로직을 모듈 형태로 제공하는 패키지로, 

카메라 연출에 들어가는 수학/로직 부담을 크게 줄여준다.

 


그래서 오늘은 시네머신이 무엇인지 간단히 정리하고,

시네머신을 이용한 실습을 진행해 볼 예정이다.

 

 

 


 

 

 

1) Cinemachine이란?



시네머신(Cinemachine)은 여러 ‘가상 카메라(샷)’를 만들어두고, 

Brain이 상황에 맞는 카메라를 선택/블렌딩하여 실제 카메라를 자동으로 움직이게 하는 시스템

 

 

Main Camera + Cinemachine Brain이 실제 렌더 카메라 역할을 하고,
여러 개의 CinemachineCamera를 만들고 필요할 때 바꿔가며 연출한다.

 

 

 

 

 


 

 

 

2) 시네머신의 핵심 구성은?



Main Camera

실제 렌더링 담당

 


Cinemachine Brain

어떤 가상 카메라를 활성할 지 선택 + 전환(Blend) 처리

 


Cinemachine Camera(가상 카메라)

Follow/LookAt/구도/줌/흔들림 등 '샷의 규칙'을 정의


 


 

 

 

3) 시네머신 실습해보기

 

a. 오브젝트 준비

 

 

Plane 생성 후 Ground로 이름 변경

 

 

 

 

빈 오브젝트에 Player로 사용할 캐릭터 프리팹 만들어서 넣어주기

 

 

 

 

Player 자식으로 빈 오브젝트 생성 후,

CameraTarget로 이름 변경 및 Position을 (0, 1.6, 0) 정도로 변경

(머리 기준 타겟(Cinemachine-Look At)으로 사용할 예정)

 

 


 

 

b. 시네머신 설치

 

 

Window - Package Manager 클릭

 

 

 

 

Packages: Unity Registry에서 Cinemachine 검색 및 인스톨

 

 


 

 

c. Cinemachine 카메라 세팅

 

 

MainCamera - Cinemachine Brain 컴포넌트 추가

 

 

 

 

GameObject > Cinemachine > FreeLook Camera 생성

 

 

 

**Virtual Camera(VCam): 범용 가상 카메라

Body/Aim/Noise 파이프라인을 조합해서 어떤 카메라도 만들 수 있음.



**FreeLook: 3인칭 전용 오비트(공전) 카메라

타깃 주위를 3개의 리그(Top/Mid/Bottom)로 둘러싸며 공전하는 프리셋/매니저 카메라.

(3인칭 게임에서 캐릭터 중심 + 마우스로 공전이 기본인 카메라

또는 상/중/하 시점(높이 변화)이 자연스럽게 필요할 때 사용)


 

 

FreeLook 오브젝트에서

Follow = Player, Look At = CameraTarget로 설정


 

 

마우스 시야 회전 입력 연결 확인

X Axis
Input Axis Name: Mouse X

Y Axis
Input Axis Name: Mouse Y

 

 

 


 

 

 

d. 플레이어 이동 스크립트 만들기(카메라 기준)

using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class PlayerMover : MonoBehaviour
{
    public float moveSpeed = 4.5f;
    public float dashMultiplier = 1.8f;
    public float turnSpeed = 12f;

    CharacterController cc;

    void Awake()
    {
        cc = GetComponent<CharacterController>();
    }

    void Update()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        Transform cam = Camera.main != null ? Camera.main.transform : null;
        Vector3 camForward = cam ? cam.forward : Vector3.forward;
        Vector3 camRight   = cam ? cam.right   : Vector3.right;

        camForward.y = 0; camRight.y = 0;
        camForward.Normalize();
        camRight.Normalize();

        Vector3 dir = (camForward * v + camRight * h);
        if (dir.sqrMagnitude > 1f) dir.Normalize();

        float speed = moveSpeed * (Input.GetKey(KeyCode.LeftShift) ? dashMultiplier : 1f);
        cc.SimpleMove(dir * speed);

        if (dir.sqrMagnitude > 0.0001f)
        {
            Quaternion targetRot = Quaternion.LookRotation(dir, Vector3.up);
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRot, 1 - Mathf.Exp(-turnSpeed * Time.deltaTime));
        }
    }
}

PlayerMover.cs 

(Player에 부착)

 

 

 


 

 

 

e. 우클릭 줌인/줌아웃 토글 스크립트 만들기

using UnityEngine;
using Cinemachine;

public class FreeLookZoomToggle : MonoBehaviour
{
    public float zoomFov = 35f;   // 줌인 FOV
    public float smooth = 12f;    // 보간 속도

    CinemachineFreeLook freeLook;
    float normalFov;
    bool zoomed;

    void Awake()
    {
        freeLook = GetComponent<CinemachineFreeLook>();
        normalFov = freeLook.m_Lens.FieldOfView; // 기본 FOV 저장
    }

    void Update()
    {
        // 우클릭 토글
        if (Input.GetMouseButtonDown(1))
            zoomed = !zoomed;

        float target = zoomed ? zoomFov : normalFov;

        var lens = freeLook.m_Lens;
        float t = 1f - Mathf.Exp(-smooth * Time.deltaTime);
        lens.FieldOfView = Mathf.Lerp(lens.FieldOfView, target, t);
        freeLook.m_Lens = lens;
    }
}

 

 

FreeLookZoomToggle.cs

 (FreeLook에 부착)

 

 

 


 

 

 

4) 실습 결과

 

 

 

 

 

 


 

 

 

5) 오늘의 한 줄 요약

 

 

  시네머신(Cinemachine)은 여러 ‘가상 카메라’ 중 상황에 맞는 샷을 선택해,

실제 Main Camera를 자동으로 구동하는 카메라 시스템이다.

 

 

 

반응형

+ Recent posts