using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame; using Ichni.RhythmGame.Beatmap; using UnityEngine; namespace Ichni.Editor { public class SceneCamera : MonoBehaviour, IBaseElement { public Camera camera; 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(_ => camera.orthographic = viewType == GameCamera.CameraViewType.Orthographic); perspectiveAngleField.AddListenerFunction(_ => camera.fieldOfView = perspectiveAngle); orthographicSizeField.AddListenerFunction(_ => camera.orthographicSize = orthographicSize); var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true); positionInputFields.AddListenerFunction(() => camera.transform.position = cameraPosition); var eulerAnglesInputFields = inspector.GenerateVector3InputField(this, container, "Euler Angles", nameof(cameraEulerAngles), true); eulerAnglesInputFields.AddListenerFunction(() => camera.transform.eulerAngles = cameraEulerAngles); container.SetDeviver(1); } private void Update() { cameraPosition = camera.transform.position; cameraEulerAngles = camera.transform.eulerAngles; } } }