103 lines
3.2 KiB
C#
103 lines
3.2 KiB
C#
|
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
|
|||
|
}
|