본문 바로가기
개발/Unity

(4) 스크립트로 FreeLook Camera 제어하기 - 유니티 시네머신 튜토리얼

by 피로물든딸기 2022. 9. 19.
반응형

Unity 전체 링크

Cinemachine Tutorial

- (3) 마우스 스크롤로 FreeLook Camera Zoom in / out
- (4) FreeLook Camera 속성 및 설정 (Control FreeLook Camera Attributes and Settings by Script)
- (5) Blend List Camera로 카메라 전환하기

깃허브에서 코드 확인하기


CMFreelookSetting.cs를 수정한다.
프리룩 카메라의 속성을 아래와 같이 script로 제어할 수 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;

public class CMFreelookSetting : MonoBehaviour
{
    CinemachineFreeLook freeLook;
    void Awake()
    {
        CinemachineCore.GetInputAxis = clickControl;
    }

    void Start()
    {
        // Target 설정
        freeLook = this.GetComponent<CinemachineFreeLook>();
        freeLook.Follow = GameObject.Find("PlayerArmature").transform;
        freeLook.LookAt = GameObject.Find("PlayerCameraRoot").transform;

        // Lens 설정
        freeLook.m_Lens.FieldOfView = 50;
        freeLook.m_Lens.NearClipPlane = 0.2f;
        freeLook.m_Lens.FarClipPlane = 4000;
        freeLook.m_Lens.Dutch = 0;
        freeLook.m_Lens.ModeOverride = LensSettings.OverrideModes.None;

        // Axis Control 설정
        freeLook.m_XAxis.Value = 0;
        freeLook.m_XAxis.m_MaxSpeed = 300;
        freeLook.m_XAxis.m_AccelTime = 0.1f;

        // Rig 설정
        CinemachineComposer composer 
            = freeLook.GetRig(1).GetCinemachineComponent<CinemachineComposer>();
        composer.m_DeadZoneHeight = 0.3f;
        composer.m_DeadZoneWidth = 0.5f;
    }

    public float clickControl(string axis)
    {
        if(Input.GetMouseButton(0))
            return UnityEngine.Input.GetAxis(axis);

        return 0;
    }
}

Target 설정

    freeLook = this.GetComponent<CinemachineFreeLook>();
    freeLook.Follow = GameObject.Find("PlayerArmature").transform;
    freeLook.LookAt = GameObject.Find("PlayerCameraRoot").transform;


Lens 설정

    freeLook.m_Lens.FieldOfView = 50;
    freeLook.m_Lens.NearClipPlane = 0.2f;
    freeLook.m_Lens.FarClipPlane = 4000;
    freeLook.m_Lens.Dutch = 0;
    freeLook.m_Lens.ModeOverride = LensSettings.OverrideModes.None;


렌즈의 값에 대한 변경 사항은 아래와 같다.
Vertical FOV(Field of View)로 타겟과의 거리를 설정할 수 있다.
그리고 Near / Far Clip Plane으로 카메라가 나오는 거리를 설정할 수 있다.
Dutch는 화면을 Rotate하는 기울기를 설정한다.


Advanced에서 OverrideModes를 변경할 수 있다.


Axis Control 설정

    freeLook.m_XAxis.Value = 0;
    freeLook.m_XAxis.m_MaxSpeed = 300;
    freeLook.m_XAxis.m_AccelTime = 0.1f;


FreeLook은 기본적으로 마우스 입력을 받는다.
마우스 입력에 대한 값, 속도, 가속, 감속, Invert 등을 설정할 수 있다.


FreeLook에는 기본적으로 Top / Middle / Buttom을 제공한다.

 

FreeLook 카메라의 경우 Body 속성이 Orbital Transposer로 고정된다.


그리고 Aim을 누르면 Game 뷰에서 화면이 아래와 같이 변경된다.

(변경되지 않는다면 Game Window Guides를 체크하면 된다.)
Aim은 Target을 따라가는 알고리즘을 제어한다.


Lookahead Time과 Smoothing을 설정하면 조금 더 부드럽게 화면을 전환할 수 있다.


Dead Zone을 설정하면 이 영역에 있을 때는 카메라 시야를 계속 유지한다.


그 외 Screen / Bias 등을 조절해서 기준점을 설정할 수 있다.


Aim 설정은 아래와 같이 GetRig( 0, 1, 2 )로 Top / Middle / Buttom 설정을 들고와서 스크립트로 제어한다.

    CinemachineComposer composer 
        = freeLook.GetRig(1).GetCinemachineComponent<CinemachineComposer>();
    composer.m_DeadZoneHeight = 0.3f;
    composer.m_DeadZoneWidth = 0.5f;

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글