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);
}
}
}
}