当前位置: 首页 > news >正文

Unity 透视摄像机视野适配不同分辨率的屏幕

正交摄像机的请看这篇文章,就懒得再写一次了:Unity UGUI使用技巧与经验总结(不定期更新)_unity ugui技巧 之 text文本框随内容自动调整-CSDN博客

相关注释请看代码中的说明

using UnityEngine;/// <summary>
/// 透视摄像机视野适配,注意单独修改视野大小容易造成透视效果不佳的情况,请慎用
/// </summary>
public class CameraAutoFix : MonoBehaviour
{[Tooltip("顶部需要显示的物体")]public Transform topPos;[Tooltip("底部需要显示的物体")]public Transform bottomPos;public Camera m_Camera;/// <summary>/// 因为要转换为WebGL平台,webgl平台会将结构体转换为一个class,所以这里单独声明并缓存一下,下方使用set函数进行值的修改则是为了避免修改时new一个新的Vector3对象出来/// </summary>private Vector3 topV = new Vector3();private Vector3 bottomV = new Vector3();[Space][Tooltip("左侧需要显示的物体")]public Transform leftPos;[Tooltip("右侧需要显示的物体")]public Transform rightPos;#if UNITY_EDITOR[Space]public bool resetSet = false;#endifpublic void Awake(){if (m_Camera == null)m_Camera = GetComponent<Camera>();AutoFixedFovSize();}#if UNITY_EDITORprivate void Update(){if (resetSet){AutoFixedFovSize();resetSet = false;}}#endif// FOV: 相机的垂直视野,以度为单位/// <summary>/// 自动调整视野大小/// </summary>private void AutoFixedFovSize(){float targetValue = 0;// 将角度进行转换if (Screen.height < Screen.width) // 竖屏{topV.Set(topPos.position.x - m_Camera.transform.position.x, topPos.position.y - m_Camera.transform.position.y, topPos.position.z - m_Camera.transform.position.z);bottomV.Set(bottomPos.position.x - m_Camera.transform.position.x, bottomPos.position.y - m_Camera.transform.position.y, bottomPos.position.z - m_Camera.transform.position.z);// 因为测试下来,所得到的角度,差不多为所需角度的一半,所以这里*2翻倍一下targetValue = Vector3.Angle(topV, bottomV) * 2;}else{// 取摄像机看向所需显示的点的角度topV.Set(leftPos.position.x - m_Camera.transform.position.x, leftPos.position.y - m_Camera.transform.position.y, leftPos.position.z - m_Camera.transform.position.z);bottomV.Set(rightPos.position.x - m_Camera.transform.position.x, rightPos.position.y - m_Camera.transform.position.y, rightPos.position.z - m_Camera.transform.position.z);targetValue = Camera.VerticalToHorizontalFieldOfView(Vector3.Angle(topV, bottomV), (float)Screen.height / Screen.width);}// 原始配置可用时,则不进行更改if (m_Camera.fieldOfView < targetValue)m_Camera.fieldOfView = targetValue;}
}

http://www.dtcms.com/a/406423.html

相关文章:

  • 可持续金融的新范式:拆解欧盟ESG监管体系及其全球影响力
  • 【数据保护】一种安全高效的全匿踪纵向联邦学习方法
  • 阿里云物联网平台seo站外优化平台
  • 网站开发软件 手机网站做app有什么意义
  • WorldSimBench: 迈向作为世界模拟器的视频生成模型——论文解读
  • 嵌入式 - 内核驱动1 - 配置linux驱动
  • 工作中学习自己的Qt知识误区-Version3
  • C#连接达梦(DM)数据库
  • 服务器独立显卡可以亮机但进不了系统怎么办
  • 超高密度2kW GaN基低压电机驱动器的设计
  • 「日拱一码」100 机器学习辅助定向进化MLDE
  • C++项目:仿muduo库高并发服务器------EventLoop模块的设计
  • 电子商务网站开发综合实训报告h5页面制作工具包括
  • 全栈信创+AI大模型:百分点科技BD-OS重塑数据治理基座
  • 时隔一天第二阶段他来了 html!!!!!!!!!!!
  • [创业之路-596]:半导体生产中所需要光源的上下游产业链
  • spring-ai简单示例
  • sqlsugar sqlite
  • IP 授权管理标识:守护 IP 价值,解锁商业新可能
  • 深度学习学习路线图:从MNIST到MobileNetV4,从理论到实践的完整指南——基础理论与经典模型实践
  • C++项目:仿muduo库高并发服务器-------poller模块
  • 建设项目审批后公示在哪个网站国内重大新闻2022
  • 联雅网站建设公司谷城网站定制
  • Rust语言入门难,难在哪?所有权、借用检查器、生命周期和泛型介绍
  • 告别轮询!WebSocket 实战宝典:构建高效实时应用的完整解决方案
  • 【rust】: use of unstable library feature ‘os_str_display‘
  • seo如何根据网站数据做报表视频号推广方法
  • 政务网站队伍建设情况wordpress主题更改
  • PostIn入门到实战(3) - 如何快速设计并分享接口文档
  • Golang学习笔记: 常用标准库