카메라 시점 기능 수정

This commit is contained in:
정영민
2025-04-09 14:41:40 +09:00
parent 6aa79ae91b
commit 45767d82ed
8 changed files with 464 additions and 109 deletions

View File

@@ -8,9 +8,11 @@ using RenderHeads.Media.AVProMovieCapture;
using System.IO;
using SFB;
using CHN;
using System.Linq;
public class Panel_ToolBar : PanelBase
{
private Dictionary<ViewMode, Button> viewButtons = new Dictionary<ViewMode, Button>();
public Button Button_TopView;
public Button Button_QuarterView;
public Button Button_SholuderView;
@@ -26,6 +28,7 @@ public class Panel_ToolBar : PanelBase
private Image Image_MiniMapActive;
private Image Image_FloorControlActive;
private Button currentViewButton;
private CaptureBase capture;
public Action<ViewMode> onClickCameraView;
@@ -47,6 +50,10 @@ public class Panel_ToolBar : PanelBase
Button_Capture.onClick.AddListener(OnClickCapture);
Button_FloorControl.onClick.AddListener(OnClickFloorControl);
viewButtons.Add(ViewMode.TopView, Button_TopView);
viewButtons.Add(ViewMode.PerspectiveView, Button_QuarterView);
viewButtons.Add(ViewMode.FirstPersonView, Button_SholuderView);
RecordSetting();
CaptureSetting();
}
@@ -168,4 +175,24 @@ public class Panel_ToolBar : PanelBase
{
onClickCameraView?.Invoke(ViewMode.TopView);
}
private void SetViewButtonState(Button button)
{
if (currentViewButton != null)
{
var images = currentViewButton.GetComponentsInChildren<Image>(true);
var image = images.Where(a => a != currentViewButton.image).First();
image.gameObject.SetActive(false);
}
currentViewButton = button;
var currentButtonImages = currentViewButton.GetComponentsInChildren<Image>(true);
var currentButtonImage = currentButtonImages.Where(a => a != currentViewButton.image).First();
currentButtonImage.gameObject.SetActive(true);
}
public void SetChangeViewButtonState(ViewMode viewMode)
{
var viewButton = viewButtons[viewMode];
SetViewButtonState(viewButton);
}
}

View File

@@ -0,0 +1,132 @@
using CHN;
using UnityEngine;
using WI;
public class ViewManager : MonoBehaviour, ISingle
{
private Building building;
private OrbitalController controller;
private ViewMode preViewMode;
public override void AfterAwake()
{
building = FindSingle<Building>();
controller = FindSingle<OrbitalController>();
}
public void ChangeViewWithButtonClick(ViewMode mode)
{
preViewMode = controller.viewMode;
controller.SetViewMode(mode);
switch (mode)
{
case ViewMode.PerspectiveView:
SetPerPerspectiveView();
break;
case ViewMode.TopView:
SetTopView();
break;
case ViewMode.FirstPersonView:
SetFirstPersonView(preViewMode);
break;
}
controller.LastPositioning(true);
}
private void SetPerPerspectiveView()
{
if(controller.saveTargetPositions[ViewMode.PerspectiveView] == null)
{
var perspectivePos = controller.option.target.position;
var floorStartPos = building.currentFloor.StartPoint.position;
var newPos = new Vector3(perspectivePos.x, floorStartPos.y, perspectivePos.z);
controller.nextPosition = newPos;
building.SetAllFloorExternalState();
}
else
{
building.SetAllFloorExternalState();
var floorIndex = controller.saveTargetPositions[ViewMode.PerspectiveView].floorIndex;
var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
slider.ChangeValueFromOutside(floorIndex);
}
}
private void SetTopView()
{
if (controller.saveTargetPositions[ViewMode.TopView] == null)
{
building.SetAllFloorExternalState();
}
else
{
building.SetAllFloorExternalState();
var floorIndex = controller.saveTargetPositions[ViewMode.TopView].floorIndex;
var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
slider.ChangeValueFromOutside(floorIndex);
}
}
private void SetFirstPersonView(ViewMode preViewMode)
{
if (building.currentFloor.isEmptyFloor)
{
controller.SetViewMode(preViewMode);
return;
}
if (controller.saveTargetPositions[ViewMode.FirstPersonView] == null)
{
building.SetCurrentFloorInternalState();
var pos = controller.option.target.position;
var startPos = building.currentFloor.StartPoint.position;
if (building.currentFloor.FloorContainsPoint(pos))
{
var tourModePos = new Vector3(pos.x, startPos.y, pos.z);
startPos = tourModePos;
}
controller.nextPosition = startPos;
}
else
{
building.SetCurrentFloorInternalState();
var floorIndex = controller.saveTargetPositions[ViewMode.FirstPersonView].floorIndex;
var slider = FindSingle<Canvas_Right>().panel_floorcontrol;
slider.ChangeValueFromOutside(floorIndex);
}
}
public void ChangeViewWithFloorControl(Floor currentFloor, Vector3 pos)
{
var startPos = building.currentFloor.StartPoint.position;
if (currentFloor.isEmptyFloor)
{
if (controller.viewMode.Equals(ViewMode.FirstPersonView))
{
controller.SetViewMode(ViewMode.PerspectiveView);
}
}
else
{
if (!currentFloor.FloorContainsPoint(controller.option.target.position))
{
if (controller.viewMode.Equals(ViewMode.FirstPersonView))
{
controller.nextPosition = startPos;
}
}
}
building.SetAllFloorExternalState();
if (!controller.option.isFirstPersonView)
return;
currentFloor.SetInternalState();
controller.LastPositioning(true);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 74b9e0ad948970648bdc18cdbdbb9f4c