using System; using UnityEngine; namespace XGame.Framework.Map { /// /// 相机的fieldOfView设置参数 /// 相机默认以高度自适应,以保证垂直方向的显示内容一致, /// 竖屏游戏地图需要固定宽度以保证水平方向的显示内容一致, /// 横屏游戏不需要该设置 /// [Serializable] public struct CameraFieldOfViewOptions { /// /// 是否固定宽度 /// Camera.FieldOfViewAxis.Horizontal /// [Header("是否固定宽度")] public bool isLockHorizontal; /// /// orthographicSize参考值,正交相机有效 /// 修正时以该值为基础根据分辨率重新计算 /// [Header("orthographicSize参考值,正交相机有效")] public float size; /// /// fov参考值,透视相机有效 /// 取相机的FOVAxis==Horizontal时FieldOfView的值 /// 赋值完相机需要设置为FOVAxis=Vertical /// 相机视口度数 /// [Header("fov参考值,透视相机有效")] public float fieldOfView; ///// ///// 地图相机的设计分辨率 ///// 只用来计算长宽比 ///// //[Header("地图相机的设计分辨率,只用来计算长宽比")] //public Vector2Int designSize; /// /// 修正fov /// 以相机的FOVAxis==Vertical计算 /// /// public void FixFieldOfView(Camera camera) { if (!isLockHorizontal) return; if (camera.orthographic) { camera.orthographicSize = size / camera.aspect * 0.5f; } else { var target = Mathf.Tan(fieldOfView * Mathf.PI / 360f) / camera.aspect; camera.fieldOfView = Mathf.RoundToInt(Mathf.Atan(target) * Mathf.Rad2Deg * 2); } } } }