카메라 기능 개발
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user