유니티 내에서 제공하는 시네머신의 속성중 Confiner에서 Bounding Shape 2D를 스크립트에서 제어하는 방법이다. 이를 이용하면 시네머신 1개의 영역을 런타임중 동적으로 할당할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
public class ConfinerChange : MonoBehaviour
{
public static ConfinerChange confinerChangeInstance;
public static CinemachineConfiner confiner;
void Awake()
{
confinerChangeInstance = this;
confiner = FindObjectOfType<CinemachineConfiner>();
}
public static void CameraBorder(Collider2D newConfiner)
{
confiner.m_BoundingShape2D = newConfiner;
}
}
위 FindObjectOfType가 정말 안좋은거지만 일단 구현하는게 우선이라 넣어서 만들었다. m_BoundingShape2D 를 변경함으로서 시네머신의 영역을 동적으로 할당할 수 있는 것이다
// 적용
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
public class CameraManager : MonoBehaviour
{
public static CameraManager camManager;
public static bool isCam1On;
[SerializeField] GameObject cam1;
[SerializeField] GameObject cam2;
public CinemachineConfiner cam1Confiner;
public CinemachineConfiner cam2Confiner;
void Awake()
{
camManager = this;
isCam1On = true;
}
public static void ChangeCam(Collider2D border)
{
if(isCam1On)
{
camManager.cam2Confiner.m_BoundingShape2D = border;
isCam1On = false;
camManager.cam2.gameObject.SetActive(true);
camManager.cam1.gameObject.SetActive(false);
}
else
{
camManager.cam1Confiner.m_BoundingShape2D = border;
isCam1On = true;
camManager.cam1.gameObject.SetActive(true);
camManager.cam2.gameObject.SetActive(false);
}
}
}
Unity Cinemachine Confiner change - 시네머신 confiner 변경 :: 껍데기방 (tistory.com)
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] 스프라이트 임포터 속성 (0) | 2023.09.11 |
---|---|
[Unity] 폴더 관리 (0) | 2023.09.11 |
[Unity] 최적화 Batching, Draw Call, SetPass calls (0) | 2023.08.17 |
[Unity] 생명 주기 (0) | 2023.08.16 |
[Unity] Mono 분석 (0) | 2023.08.16 |