유니티 버전 - 2022.3.17f1
목차
- 들어가며
- 현 프로젝트 세팅
- 코드
들어가며
해당 코드를 이용하여 할 수 있는것은 씬이 전환 될때 전환된 씬의 Polygon Collider 2D를 가져와서 Cinemachine의 Cinemachine Confiner 2D의 Bounding Shape 2D를 설정해 주는 것입니다
현 프로젝트 세팅
1. 해당 스크립트는 가상 카메라(CinemachineVirtualCamera)와 같은 오브젝트에 있습니다
2. 2D 환경입니다
3. 메인씬은 변하지 않고 필요한 씬이 Addtive 모드로 로드 / 언로드 됩니다
코드
// 전체 코드
// 기능과 무관한 부분은 생략 하였습니다
public class CinemachineConfinerChanger : MonoBehaviour
{
private CinemachineConfiner2D cinemachineConfiner2D;
private void Awake()
{
cinemachineConfiner2D = GetComponent<CinemachineConfiner2D>();
}
private void ChangeConfiner(object p_Args)
{
Scene scene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
GameObject[] objs = scene.GetRootGameObjects();
foreach (GameObject obj in objs)
{
if (obj.CompareTag(Setting.ConfinerTag))
{
PolygonCollider2D polygonCollider2D = obj.GetComponent<PolygonCollider2D>();
cinemachineConfiner2D.m_BoundingShape2D = polygonCollider2D;
cinemachineConfiner2D.InvalidateCache();
return;
}
}
}
}
매개변수 object p_Args : 해당 프로젝트에서 필요에 의해 설정된것으로 없어도 무방합니다
private void ChangeConfiner(object p_Args)
가장 마지막으로 로드되어있는 씬을 가져옵니다 (현재의 경우 Farm)
Scene scene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
Find 계열 함수 사용을 피하기 위해 Farm씬의 루트 오브젝트를 배열에 담아 오브젝트의 태그를 비교할 준비를 합니다
Polygon Collider 2D는 루트 오브젝트로 존재 하여야 합니다
GameObject[] objs = scene.GetRootGameObjects();
모든 루트 오브젝트가 들어있는 objs 배열의 각 요소(게임 오브젝트)의 태그가 BoundsConfiner인지 검사합니다
그리고 해당한다면 오브젝트의 PolygonCollider2D를 가져와 적용시켜주고 캐시된 confiner를 강제로 빼고 다시 계산하도록 하여줍니다
foreach (GameObject obj in objs)
{
if (obj.CompareTag(Setting.ConfinerTag))
{
PolygonCollider2D polygonCollider2D = obj.GetComponent<PolygonCollider2D>();
cinemachineConfiner2D.m_BoundingShape2D = polygonCollider2D;
cinemachineConfiner2D.InvalidateCache();
return;
}
}
Setting.cs
[Header("시네머신")]
public const string ConfinerTag = "BoundsConfiner";
코드가 실행되고 나면 바뀐 씬의 컨파이너가 적용되어있음을 확인 할 수 있습니다
'코드 및 공부 > 씬' 카테고리의 다른 글
Instantiate시 오브젝트가 Addtive씬에 생기는 문제 (0) | 2024.12.11 |
---|---|
씬의 이벤트 실행 순서(Awake, Start 이외) (0) | 2024.11.30 |
씬 관리 (1) (4) | 2024.09.22 |