본문 바로가기
개발/Unity

(15) Target Group으로 지정한 타겟을 모두 촬영하기 - 유니티 시네머신 튜토리얼

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

Unity 전체 링크

 

Cinemachine Tutorial

 

- (14) Dolly Cart로 Track을 따라 촬영하기

- (15) Target Group으로 지정한 타겟을 모두 촬영하기

- (16) Mixing Camera로 화면 혼합하기

 

깃허브에서 코드 확인하기


타겟 그룹 카메라를 이용하면 시네머신 카메라가 설정된 타겟을 모두 촬영한다.

타겟이 움직이면 타겟에 따라 화면이 움직이게 된다.

 

Target Group Camera를 추가해보자.

 

그러면 가상 카메라와 TargetGroup1이 추가된다.

 

vCam1에서는 아래와 같이 FollowLook AtTargetGroup1으로 설정되고,

AimGroup Composer로 자동 설정된다.

 

TargetGroup1에서 + 버튼을 누르면 Target으로 할 List를 추가할 수 있다.

 

+ 버튼을 세 번 눌러서 아래와 같이 추가해보자.

 

Player와 박스 2개를 추가하였다.

 

Virtual Camera를 선택하고 Scene에서 보면 노란색 박스가 생긴다.

이 박스 내에서 설정한 Target이 가능한 화면에 들어가도록 자동으로 조절한다.

 

카메라의 위치를 움직이면 노란색 박스가 적절히 조절된다.

 

또한 Target Group에 의해 대상이 자동 설정되었으므로 Lens 설정FOV는 값을 변화시켜도 변경 사항이 없다.

(Target 설정이 되어있지 않다면 Zoom in / out이 되어야 한다.)

 

게임을 실행해서 Shift를 눌러 아바타를 움직여보자.

아바타의 좌표가 변경되면서 상자 두 개의 좌표가 모두 촬영되도록 시네머신이 조절하게 된다.


TargetGroup의 설정

 

TargetGroup Camera를 이용하면 Player가 움직이는 Map 전체를 한 눈에 보기 좋게 설정할 수 있다.

미리 Map 양 끝 꼭지점에 Sphere 4개를 추가하자.

 

그리고 각각의 Sphere를 Target Group에 추가한다.

 

Target Group에서 Position Mode는 그룹의 중심을 향할지, Weight의 평균을 향할지 정한다.

 

Rotation Mode는 Weight가 변경될 때 회전하는 방법이며 Manual을 권장한다.

Manual이 직선으로 다가가는 느낌이고, Group Average가 weight의 평균을 구하며 회전하는 느낌이다.

 

실제로 Weight를 변경해보면서 비교해보자.

 

Update는 기본적으로 Late Update를 사용한다.

Late Update는 모든 Update 이후 호출되는데,

카메라의 이동은 Update 이후에 호출되어야 떨림 현상이 줄어들기 때문이다.

 

마지막으로 Target에는 Weight와 Radius가 있다.

Weight는 가중치를 의미하며, 높을수록 해당 Target을 우선적으로 촬영한다.

Radius는 Bounding Box를 계산하여 좌표 중심에서 반지름을 설정한다.

 

Radius에 따른 설정을 눈에 보이게 쉽게 하기위해 아래의 코드를 TargetGroup에 추가하자.

위의 Sphere를 Radius에 따라 size가 변하도록 하였다.

ExecuteInEditMode를 사용하면 Play하지 않아도 스크립트가 Scene에 반영된다.

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

[ExecuteInEditMode]
public class TargetGroupDebugger : MonoBehaviour
{
    CinemachineTargetGroup targetGroup;

    void Start()
    {
        targetGroup = this.GetComponent<CinemachineTargetGroup>();
    }

    void Update()
    {
        foreach(CinemachineTargetGroup.Target tg in targetGroup.m_Targets)
        {
            if (tg.target == null) continue;
            tg.target.localScale = new Vector3(tg.radius, tg.radius, tg.radius);
        }
    }
}

 

이제 Radius를 조절하면서 적절한 Map의 위치를 찾아보자.

 

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

반응형

댓글