using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame; using Ichni.RhythmGame.Beatmap; using UnityEngine; using UnityEngine.Serialization; namespace Ichni.Editor { public class SceneCamera : MonoBehaviour, IBaseElement { [FormerlySerializedAs("camera")] public Camera sceneCamera; public GameCamera.CameraViewType viewType; public float perspectiveAngle; public float orthographicSize; public BaseElement_BM matchedBM { get; set; } [HideInInspector] public Vector3 cameraPosition; //注意,这里的Position和EulerAngles,是transform的中介变量,仅能用于Inspector显示! [HideInInspector] public Vector3 cameraEulerAngles; public void SetUpInspector() { IHaveInspection inspector = EditorManager.instance.uiManager.inspector; var container = inspector.GenerateContainer("Scene Camera"); var viewTypeDropdown = inspector.GenerateDropdown(this, container, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType)); var perspectiveAngleField = inspector.GenerateInputField(this, container, "Perspective Angle", nameof(perspectiveAngle)); var orthographicSizeField = inspector.GenerateInputField(this, container, "Orthographic Size", nameof(orthographicSize)); viewTypeDropdown.AddListenerFunction(() => sceneCamera.orthographic = viewType == GameCamera.CameraViewType.Orthographic); perspectiveAngleField.AddListenerFunction(() => sceneCamera.fieldOfView = perspectiveAngle); orthographicSizeField.AddListenerFunction(() => sceneCamera.orthographicSize = orthographicSize); var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true); positionInputFields.AddListenerFunction(() => sceneCamera.transform.position = cameraPosition); var eulerAnglesInputFields = inspector.GenerateVector3InputField(this, container, "Euler Angles", nameof(cameraEulerAngles), true); eulerAnglesInputFields.AddListenerFunction(() => sceneCamera.transform.eulerAngles = cameraEulerAngles); container.SetDeviver(1); } private void Update() { cameraPosition = sceneCamera.transform.position; cameraEulerAngles = sceneCamera.transform.eulerAngles; } } }