75 lines
3.0 KiB
C#
75 lines
3.0 KiB
C#
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
|
|
{
|
|
get => sceneCamera.transform.position;
|
|
set
|
|
{
|
|
sceneCamera.transform.position = value;
|
|
}
|
|
}
|
|
[HideInInspector]
|
|
public Vector3 cameraEulerAngles
|
|
{
|
|
get => sceneCamera.transform.eulerAngles;
|
|
set
|
|
{
|
|
sceneCamera.transform.eulerAngles = value;
|
|
}
|
|
}
|
|
public bool CanBeFreeRotate => !EditorManager.instance.cameraManager.panelDrawer.isEditing;
|
|
|
|
|
|
public void SetUpInspector()
|
|
{
|
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
|
var container = inspector.GenerateContainer("Scene Camera");
|
|
|
|
//摄像机参数设置
|
|
var cameraSettings = container.GenerateSubcontainer(3);
|
|
var viewTypeDropdown =
|
|
inspector.GenerateDropdown(this, cameraSettings, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType))
|
|
.AddListenerFunction(() => sceneCamera.orthographic = viewType == GameCamera.CameraViewType.Orthographic);
|
|
var perspectiveAngleField =
|
|
inspector.GenerateInputField(this, cameraSettings, "Perspective Angle", nameof(perspectiveAngle))
|
|
.AddListenerFunction(() => sceneCamera.fieldOfView = perspectiveAngle);
|
|
var orthographicSizeField =
|
|
inspector.GenerateInputField(this, cameraSettings, "Orthographic Size", nameof(orthographicSize))
|
|
.AddListenerFunction(() => sceneCamera.orthographicSize = orthographicSize);
|
|
|
|
//摄像机位置与旋转设置
|
|
var transformSettings = container.GenerateSubcontainer(1);
|
|
var positionInputFields =
|
|
inspector.GenerateVector3InputField(this, transformSettings, "Position", nameof(cameraPosition), true)
|
|
.AddListenerFunction(() => sceneCamera.transform.position = cameraPosition);
|
|
var eulerAnglesInputFields =
|
|
inspector.GenerateVector3InputField(this, transformSettings, "Euler Angles", nameof(cameraEulerAngles), true)
|
|
.AddListenerFunction(() => sceneCamera.transform.eulerAngles = cameraEulerAngles);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
cameraPosition = sceneCamera.transform.position;
|
|
cameraEulerAngles = sceneCamera.transform.eulerAngles;
|
|
}
|
|
}
|
|
} |