Unity

2D, 3D 시점 변환 카메라로 만들어 보기

psb08 2025. 4. 14. 07:42
728x90

저는 나중에 개인 프로젝트를 하게 되면 2D, 3D 시점을 변환하여 진행하는 게임을 만들어 보고 싶었습니다.

그래서 먼저 생각한 것이 시점 변환을 어떻게 할 것인가 인데,

카메라에 있는 orthographic을 사용하여 나타내면 되지 않을까 싶어서 만들어 보았습니다.

 

그리고 2D 시점일 때랑 3D 시점일 때랑 통과할 수 있고 없는 물체를 달리 해서 테스트를 해 보았습니다.

 

RotateAxisScript.cs

using Unity.Cinemachine;
using UnityEngine;

namespace Script.Axis
{
    public class RotateAxisScript : MonoBehaviour
    {
        private ViewSwitchCollider[] viewSwitchObjects;

        public Camera mainCamera;
        public CinemachineCamera vcam;
        private bool is3DMode = true;

        private void Awake()
        {
            viewSwitchObjects = FindObjectsOfType<ViewSwitchCollider>();
        }

        private void Start()
        {
            ApplyView(); // 시작할 때 현재 뷰에 맞게 설정
        }

        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.F))  //쿨타임 만들기
            {
                SwitchView();
            }
        }

        private void SwitchView()
        {
            is3DMode = !is3DMode;
            ApplyView();
        }

        private void ApplyView()
        {
            mainCamera.orthographic = !is3DMode;
            mainCamera.transform.position = is3DMode ? new Vector3(0, 5, -10) : new Vector3(0, 0, -10);

            if (is3DMode)
            {
                vcam.transform.rotation = Quaternion.Euler(25, 0, 0);
            }
            else
            {
                vcam.transform.rotation = Quaternion.identity;
            }

            foreach (var obj in viewSwitchObjects)
            {
                obj.SetView(is3DMode);
            }
        }
    
    
    
    }
}

이름을 어떻게 지어야 할 지 몰라 RotateAxis라고 지었습니다.

ViewSwitchCollider는 나중에 소개할 스크립트 인데, 시점에 따라 콜라이더를 키고 끄는 코드입니다.

 

간단하게 F를 눌러 실행할 수 있으며, 나중에 쿨타임을 추가 할 예정입니다.

 

private void ApplyView()
        {
            mainCamera.orthographic = !is3DMode;
            mainCamera.transform.position = is3DMode ? new Vector3(0, 5, -10) : new Vector3(0, 0, -10);

            if (is3DMode)
            {
                vcam.transform.rotation = Quaternion.Euler(25, 0, 0);
            }
            else
            {
                vcam.transform.rotation = Quaternion.identity;
            }

            foreach (var obj in viewSwitchObjects)
            {
                obj.SetView(is3DMode);
            }
        }

orthographic을 is3DMode에 따라 변환을 해줍니다.

위치를 is3DMode에 따라 변경합니다. is3DMode라면 3D 느낌이 나도록, 아니라면 2D 느낌이 나도록 설정했습니다.

그 다음으로는 is3DMode에 따라 각도를 변경하여 3D의 느낌과 2D의 느낌을 각각 줍니다.

 

 

728x90

'Unity' 카테고리의 다른 글

수업 내용 복습 7  (0) 2025.03.29
수업 내용 복습 6  (0) 2025.03.29
수업 내용 복습 5  (0) 2025.03.18
수업 내용 복습 4  (0) 2025.03.17
수업 내용 복습 3  (0) 2025.03.16