Files
JJBB/Assets/Project/Script/GUI/Test/CameraTestPanel.cs

103 lines
3.2 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using Games.Scene;
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class CameraTestPanel : UIControllerBase<CameraTestPanel>
{
private void OnEnable()
{
SetInstance(this);
InitPos();
}
private void OnDisable()
{
SetInstance(null);
CleanPos();
}
public void CloseWindow()
{
UIManager.CloseUI(UIInfo.CameraTest);
}
#region
public Slider _SlideX;
public Slider _SlideY;
public Slider _SlideZ;
public Slider _SlideV;
public Text _TextX;
public Text _TextY;
public Text _TextZ;
public Text _TextV;
private SliderControl[] _sliderControls;
private bool _AfterInit;
private void InitPos()
{
CleanPos();
if (SceneLogic.CameraController == null)
LogModule.ErrorLog("摄像机控制组件无法找到摄像机控制器!");
else
{
_sliderControls = new SliderControl[4];
_sliderControls[0] = new SliderControl("仰角", 0f, 60f, SceneLogic.CameraController.Pitch, _SlideX, _TextX, a => SceneLogic.CameraController.Pitch = a);
_sliderControls[1] = new SliderControl("水平角", 0f, 360f, SceneLogic.CameraController.Yaw, _SlideY, _TextY, a => SceneLogic.CameraController.Yaw = a);
_sliderControls[2] = new SliderControl("距离", 5f, 30f, SceneLogic.CameraController.Distance, _SlideZ, _TextZ, a => SceneLogic.CameraController.Distance = a);
_sliderControls[3] = new SliderControl("视角比例", 0f, 1f, SceneLogic.CameraController.FoVScale, _SlideV, _TextV, a => SceneLogic.CameraController.FoVScale = a);
}
}
private void CleanPos()
{
if (_sliderControls != null)
{
for (var i = 0; i < _sliderControls.Length; i++)
_sliderControls[i].Clear();
}
_sliderControls = null;
}
private class SliderControl
{
private readonly string name;
private readonly float minValue;
private readonly float maxValue;
private readonly float defaultValue;
private readonly UnityAction<float> action;
private readonly Text text;
private readonly Slider slider;
public SliderControl(string name, float minValue, float maxValue, float defaultValue, Slider slider, Text text, UnityAction<float> action)
{
this.name = name;
this.minValue = minValue;
this.maxValue = maxValue;
this.action = action;
this.text = text;
this.slider = slider;
// 注:不精确,浮点计算精度问题,可以忽略
slider.value = (defaultValue - minValue) / (maxValue - minValue);
OnSliderValue(slider.value);
slider.onValueChanged.AddListener(OnSliderValue);
}
private void OnSliderValue(float ratio)
{
var value = Mathf.Lerp(minValue, maxValue, ratio);
text.text = string.Format("{0}:{1:0.00}", name, value);
action(value);
}
public void Clear()
{
slider.onValueChanged.RemoveListener(OnSliderValue);
}
}
#endregion
}