카메라 기능 개발

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

@@ -26,18 +26,18 @@ MonoBehaviour:
_elevationRotateLimit: 0
_isFirstPersonView: 0
originElevation: 28.5
currentElevation: 90
currentElevation: 28.5
elevationSensivity: 15
minElevation: 5
maxElevation: 90
originAzimuth: 133
currentAzimuth: 89.75
currentAzimuth: 133
azimuthSensivity: 15
maxDistance: 150
minDistance: 5
moveClamper: 0.033333335
moveClamper: 1
originDistance: 120
originTargetPos: {x: -37.685005, y: 27, z: 29.893412}
originTargetRot: {x: -0, y: 0, z: 0}
currentDistance: 115.012886
currentDistance: 150
target: {fileID: 0}

View File

@@ -0,0 +1,15 @@
namespace WI
{
[System.Serializable]
public class CameraEntity
{
public float x;
public float y;
public float z;
public float distance;
public float elevation;
public float azimuth;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: db7ea094b0ebba741893718f5fbfcbaa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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;
}
}
}

View File

@@ -630,6 +630,130 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2066073}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &2501007
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 883006602906283311}
m_Modifications:
- target: {fileID: 1150849515297238015, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_Name
value: Panel_MiniMap
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_SizeDelta.x
value: 325
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_SizeDelta.y
value: 235
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 296
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -204.5
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 565fc7bc07217ae439fa29f99158e1db, type: 3}
--- !u!224 &2501008 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 2563419348715790888, guid: 565fc7bc07217ae439fa29f99158e1db,
type: 3}
m_PrefabInstance: {fileID: 2501007}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2605124 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5833450743008650472, guid: 8a492aeaab6f6dc4d88a122eccfa8695,
@@ -90729,7 +90853,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &235211501
Transform:
m_ObjectHideFlags: 0
@@ -270525,7 +270649,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &945947359
Transform:
m_ObjectHideFlags: 0
@@ -423110,7 +423234,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &1542891890
Transform:
m_ObjectHideFlags: 0
@@ -505509,7 +505633,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &1860719522
Transform:
m_ObjectHideFlags: 0
@@ -577152,6 +577276,7 @@ RectTransform:
- {fileID: 6365052453720453628}
- {fileID: 381335737}
- {fileID: 1522602760}
- {fileID: 2501008}
- {fileID: 1675592997}
- {fileID: 906202995}
- {fileID: 1073553747}
@@ -581470,6 +581595,21 @@ PrefabInstance:
propertyPath: runSpeed
value: 3
objectReference: {fileID: 0}
- target: {fileID: 2795261250788500754, guid: e8aa14877be9b924882fcad9d88abe46,
type: 3}
propertyPath: nextPosition.x
value: -37.68501
objectReference: {fileID: 0}
- target: {fileID: 2795261250788500754, guid: e8aa14877be9b924882fcad9d88abe46,
type: 3}
propertyPath: nextPosition.y
value: 27
objectReference: {fileID: 0}
- target: {fileID: 2795261250788500754, guid: e8aa14877be9b924882fcad9d88abe46,
type: 3}
propertyPath: nextPosition.z
value: 29.89341
objectReference: {fileID: 0}
- target: {fileID: 3640034311448942995, guid: e8aa14877be9b924882fcad9d88abe46,
type: 3}
propertyPath: m_LocalPosition.x
@@ -583160,6 +583300,7 @@ MonoBehaviour:
panel_worktimeanalysis: {fileID: 0}
panel_injectionproduction: {fileID: 0}
panel_assemblyproduction: {fileID: 0}
panel_minimap: {fileID: 0}
ui_workanalysis: {fileID: 0}
panel_controlsetting: {fileID: 0}
panel_protocolsetting: {fileID: 0}

View File

@@ -32,21 +32,18 @@ namespace CHN
var datamanager = FindSingle<DataManager>();
var raycaster = FindSingle<CHNRaycaster>();
//building.onSettingBuildingComplete += topCanvas.panel_toptoolbar.SetChangeViewState;
topCanvas.panel_toolbar.onClickDashBoard += popupCanvas.panel_dashboard.Open;
topCanvas.panel_toolbar.onClickCameraView += ChangeCameraView;
topCanvas.panel_toolbar.onClickDashBoard += popupCanvas.panel_dashboard.Open;
topCanvas.panel_toolbar.onClickCustomView += controller.SaveTargetPosition;
topCanvas.panel_toolbar.onClickMiniMap += popupCanvas.panel_minimap.SetActive;
topCanvas.panel_toptoolbar.GetFloor = building.GetFloor;
//topCanvas.panel_toptoolbar.onChangeView += ChangeCameraView;
topCanvas.panel_toptoolbar.onClickAlarms += popupCanvas.panel_completealramhistory.SetActive;
topCanvas.panel_toptoolbar.onClickScreenInitialization += SceneReLoad;
topCanvas.panel_toptoolbar.onClickProductionProgress += popupCanvas.panel_injectionproduction.Open;
topCanvas.panel_toptoolbar.onClickAssemblyProgress += popupCanvas.panel_assemblyproduction.Open;
topCanvas.panel_toptoolbar.onClickSetting += popupCanvas.panel_menu.Open;
topCanvas.panel_toolbar.onClickMiniMap += popupCanvas.panel_minimap.SetActive;
rightCanvas.panel_floorcontrol.onValueChanged += building.SetTopFloor;
rightCanvas.panel_floorcontrol.onValueChanged += popupCanvas.panel_minimap.ChangeMiniMapFloor;
@@ -126,7 +123,9 @@ namespace CHN
}
private void ChangeCameraView(ViewMode mode)
{
controller.SetViewMode(mode);
if (building.currentFloor.isEmptyFloor)
return;
switch (mode)
{
case ViewMode.PerspectiveView:
@@ -136,14 +135,6 @@ namespace CHN
case ViewMode.FirstPersonView:
building.SetCurrentFloorInternalState();
var raycaster = FindSingle<CHNRaycaster>();
//if (raycaster.hitFloorIndex != building.currentFloor.floorIndex)
//{
// var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
// slider.ChangeValueFromOutside(raycaster.hitFloorIndex);
//}
var pos = controller.option.target.position;
if (building.currentFloor.FloorContainsPoint(pos))
@@ -154,6 +145,7 @@ namespace CHN
controller.nextPosition = startPos;
break;
}
controller.SetViewMode(mode);
}
}
}

View File

@@ -27,6 +27,8 @@ public class Panel_ToolBar : PanelBase
public Action onClickDashBoard;
public Action<ViewMode> onClickCameraView;
public Action onClickCustomView;
public override void AfterAwake()
{
Button_TopView.onClick.AddListener(OnClickTopView);
@@ -123,7 +125,7 @@ public class Panel_ToolBar : PanelBase
private void OnClickCustomView()
{
Debug.Log("CustomView");
onClickCustomView?.Invoke();
}
private void OnClickDashBoard()