카메라 기능 개발

This commit is contained in:
정영민
2025-03-14 09:21:26 +09:00
parent a92138fe89
commit 242635497f
8 changed files with 321 additions and 102 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
@@ -9,6 +10,8 @@ namespace WI
public class OrbitalController : GenericController, ISingle, IOptionable
{
public new OrbitalControllerOption option => base.option as OrbitalControllerOption;
public SDictionary<ViewMode, CameraEntity> saveTargetPositions = new SDictionary<ViewMode, CameraEntity>();
public Action<int> ZoomInOutEvent;
public int maxValue;
public float duration_MoveToCamera;
@@ -59,6 +62,12 @@ namespace WI
base.AfterAwake();
targetColliderRadius = option.target.GetComponent<SphereCollider>().radius;
foreach(ViewMode mode in Enum.GetValues(typeof(ViewMode)))
{
saveTargetPositions.Add(mode, null);
}
SetViewMode(ViewMode.PerspectiveView);
}
public override void AfterStart()
@@ -379,28 +388,55 @@ namespace WI
}
public void CameraTopView()
{
var saveData = saveTargetPositions[ViewMode.TopView];
option.maxDistance = 35f;
option.currentElevation = 90f;
option.currentDistance = 35f;
option.currentAzimuth = 0f;
if (saveData == null)
{
option.currentElevation = 90f;
option.currentDistance = 35f;
option.currentAzimuth = 0f;
}
else
{
SetCameraData(viewMode);
}
LastPositioning(true);
}
public void CameraFirstPersonView()
{
camera.transform.position = option.target.position;
option.currentDistance = 5f;
option.currentElevation = 0f;
option.currentAzimuth = 0f;
var saveData = saveTargetPositions[ViewMode.FirstPersonView];
if (saveData == null)
{
camera.transform.position = option.target.position;
option.currentDistance = 5f;
option.currentElevation = 0f;
option.currentAzimuth = 0f;
}
else
{
SetCameraData(viewMode);
}
LastPositioning(true);
}
public void CameraPerspectiveView()
{
var saveData = saveTargetPositions[ViewMode.PerspectiveView];
option.maxDistance = 150f;
option.currentDistance = option.originDistance;
option.currentAzimuth = option.originAzimuth;
option.currentElevation = option.originElevation;
if (saveData == null)
{
option.currentDistance = option.originDistance;
option.currentAzimuth = option.originAzimuth;
option.currentElevation = option.originElevation;
}
else
{
SetCameraData(viewMode);
}
LastPositioning(true);
}
@@ -438,5 +474,27 @@ namespace WI
onFirstPersonViewRay?.Invoke(hit);
}
}
public void SaveTargetPosition()
{
var cameraEntity = new CameraEntity();
cameraEntity.x = option.target.position.x;
cameraEntity.y = option.target.position.y;
cameraEntity.z = option.target.position.z;
cameraEntity.distance = option.currentDistance;
cameraEntity.azimuth = option.currentAzimuth;
cameraEntity.elevation = option.currentElevation;
saveTargetPositions[viewMode] = cameraEntity;
}
private void SetCameraData(ViewMode currentViewMode)
{
var cameraData = saveTargetPositions[currentViewMode];
nextPosition = new Vector3(cameraData.x, cameraData.y, cameraData.z);
Debug.Log(nextPosition);
option.currentDistance = cameraData.distance;
option.currentAzimuth = cameraData.azimuth;
option.currentElevation = cameraData.elevation;
}
}
}