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 |