using System.Collections; using Cinemachine; using Convention.WindowsUI.Variant; using UnityEngine; namespace Demo.Game { public class CameraObject : ScriptableObject { private Camera MainCamera; private CinemachineVirtualCamera VirtualCamera; public static CameraObject MakeCameraObject() { Transform mainCameraTransform = Editor.EditorController.instance.MainGameController.MainCameraTransform; if (mainCameraTransform.GetComponent() != null) { Debug.LogError($"Too much {nameof(CameraObject)}", mainCameraTransform); return null; } // Binding Output FindObjectOfType().ModuleCamera = mainCameraTransform.gameObject.GetComponent(); return mainCameraTransform.gameObject.AddComponent(); } private void Start() { MainCamera = Camera.main; VirtualCamera = GetComponent(); } public override IEnumerator UnloadScript() { yield return base.UnloadScript(); FindObjectOfType().ModuleCamera = null; } /// /// 设置是否为正交相机 /// [Convention.RScript.Variable.Attr.Method] public void SetOrthographic(bool orthographic) { MainCamera.orthographic = orthographic; } /// /// 设置相机视野角度 /// [Convention.RScript.Variable.Attr.Method] public void SetFieldOfView(float fieldOfView) { MainCamera.fieldOfView = fieldOfView; } /// /// 设置正交相机的尺寸 /// [Convention.RScript.Variable.Attr.Method] public void SetOrthographicSize(float orthographicSize) { MainCamera.orthographicSize = orthographicSize; } /// /// 设置近裁剪面距离 /// [Convention.RScript.Variable.Attr.Method] public void SetNearClipPlane(float nearClipPlane) { MainCamera.nearClipPlane = nearClipPlane; } /// /// 设置远裁剪面距离 /// [Convention.RScript.Variable.Attr.Method] public void SetFarClipPlane(float farClipPlane) { MainCamera.farClipPlane = farClipPlane; } /// /// 设置相机深度 /// [Convention.RScript.Variable.Attr.Method] public void SetDepth(float depth) { MainCamera.depth = depth; } /// /// 设置虚拟相机跟随目标 /// [Convention.RScript.Variable.Attr.Method] public void SetVirtualCameraFollow(ScriptableObject target) { VirtualCamera.Follow = target.transform; } /// /// 设置虚拟相机观察目标 /// [Convention.RScript.Variable.Attr.Method] public void SetVirtualCameraLookAt(ScriptableObject target) { VirtualCamera.LookAt = target.transform; } /// /// 设置虚拟相机跟随偏移 /// /// X轴偏移 /// Y轴偏移 /// Z轴偏移 [Convention.RScript.Variable.Attr.Method] public void SetVirtualCameraFollowOffset(float x, float y, float z) { var body = VirtualCamera.GetCinemachineComponent(); if (body != null) { body.m_FollowOffset = new Vector3(x, y, z); } } /// /// 设置虚拟相机跟随阻尼 /// /// X轴阻尼 /// Y轴阻尼 /// Z轴阻尼 [Convention.RScript.Variable.Attr.Method] public void SetVirtualCameraFollowDamping(float x, float y, float z) { var body = VirtualCamera.GetCinemachineComponent(); if (body != null) { body.m_XDamping = x; body.m_YDamping = y; body.m_ZDamping = z; } } /// /// 设置虚拟相机观察阻尼 /// /// X轴阻尼 /// Y轴阻尼 /// Z轴阻尼 [Convention.RScript.Variable.Attr.Method] public void SetVirtualCameraLookAtDamping(float x, float y, float z) { var aim = VirtualCamera.GetCinemachineComponent(); if (aim != null) { aim.m_HorizontalDamping = x; aim.m_VerticalDamping = y; } } } }