摄像机分为两种,一种是正交摄像机还有一种是透视摄像机。正交摄像机无论远近它的视口范围永远是固定的,但是透视摄像机是由原点向外扩散性发射,也就是距离越远它的视口区域也就越大。那么我们如何获取距离摄像机任意距离的视口区域呢?如下图所示,分别用红色和黄色两种颜色将计算出来的视口区域标记了出来。

下面上代码,把如下脚本挂在摄像机出直接运行游戏即可看到。

using UnityEngine;
using System.Collections;public class CameraView : MonoBehaviour {private Camera theCamera;//距离摄像机8.5米 用黄色表示public float upperDistance = 8.5f;//距离摄像机12米 用红色表示public float lowerDistance = 12.0f;private Transform tx;void  Start (){if ( !theCamera ){theCamera = Camera.main;}tx = theCamera.transform;}void  Update (){FindUpperCorners();FindLowerCorners();}void  FindUpperCorners (){Vector3[] corners = GetCorners( upperDistance );// for debuggingDebug.DrawLine( corners[0], corners[1], Color.yellow ); // UpperLeft -> UpperRightDebug.DrawLine( corners[1], corners[3], Color.yellow ); // UpperRight -> LowerRightDebug.DrawLine( corners[3], corners[2], Color.yellow ); // LowerRight -> LowerLeftDebug.DrawLine( corners[2], corners[0], Color.yellow ); // LowerLeft -> UpperLeft}void  FindLowerCorners (){Vector3[] corners = GetCorners( lowerDistance );// for debuggingDebug.DrawLine( corners[0], corners[1], Color.red );Debug.DrawLine( corners[1], corners[3], Color.red );Debug.DrawLine( corners[3], corners[2], Color.red );Debug.DrawLine( corners[2], corners[0], Color.red );}Vector3[] GetCorners (  float distance   ){Vector3[] corners = new Vector3[ 4 ];float halfFOV = ( theCamera.fieldOfView * 0.5f ) * Mathf.Deg2Rad;float aspect = theCamera.aspect;float height = distance * Mathf.Tan( halfFOV );float width = height * aspect;// UpperLeftcorners[ 0 ] = tx.position - ( tx.right * width );corners[ 0 ] += tx.up * height;corners[ 0 ] += tx.forward * distance;// UpperRightcorners[ 1 ] = tx.position + ( tx.right * width );corners[ 1 ] += tx.up * height;corners[ 1 ] += tx.forward * distance;// LowerLeftcorners[ 2 ] = tx.position - ( tx.right * width );corners[ 2 ] -= tx.up * height;corners[ 2 ] += tx.forward * distance;// LowerRightcorners[ 3 ] = tx.position + ( tx.right * width );corners[ 3 ] -= tx.up * height;corners[ 3 ] += tx.forward * distance;return corners;}
}

这个脚本是我在逛国外网站无意间发现的,我这里翻译成了C#语言。http://answers.unity3d.com/questions/509466/scale-box-collider-to-camera-view-1.html?sort=oldest

转自:https://www.xuanyusong.com/archives/3036

Unity3D研究院之获取摄像机的视口区域(转)相关推荐

  1. Unity3D研究院之获取摄像机的视口区域

    在网上看了momo的文章,在这把代码加入些注释,也便于自己理解记忆.原理很简单,就是根据摄像机的参数计算距离摄像机某一距离的摄像机窗口四个position. using UnityEngine; us ...

  2. Unity3D研究院之鼠标控制角色移动与奔跑示例

    最新补充.          一般在做鼠标选择时是从摄像机向目标点发送一条射线,然后取得射线与对象相交的点来计算3D目标点.后来在开发中发现了一个问题(射线被别的对象挡住了),就是如果主角的前面有别的 ...

  3. Unity3D研究院之Unity中连接本地或局域网MySQL数据库

    用户名 Email 游戏蛮牛 手机端 开启辅助访问 腾讯QQ 立即注册 登录 用户名 自动登录  找回密码 密码 登录  注册帐号 [Unity5.X版本开始预售啦!] 扫一扫,访问微社区 </ ...

  4. Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

    http://www.xuanyusong.com/archives/831 http://www.xuanyusong.com/archives/1454 如果大家对Unity中如何使用数据库还不是 ...

  5. Ogre_初学指导_5_场景元素:平面、光源、阴影、摄像机、视口

    场景元素:平面.光源.阴影.摄像机.视口. Plane(平面): 要想理解Plane首先从Plane是如何构造开始学习. 在几何学中,Plane是一个无限延伸没有界限的面,但是在Ogre中Plane是 ...

  6. unity3d 2D游戏中摄像机投影类型

    我们盘点一下unity3d 2D游戏中必备的几个元素. 摄像机:无论是3D游戏还是unity3d 2D游戏摄像机都是非常重要的属性,移动摄像机即可更改屏幕中显示的内容,游戏地图的坐标永远都不会发生改变 ...

  7. Unity3D研究院之与Android相互传递消息

       上一篇文章我们学习了Unity向Android发送消息,如果Android又能给Unity回馈消息那么这就玩美了.恰好Unity for Andoid 和 IOS一样都是可以相互与Unity发送 ...

  8. 转:Unity3D研究院之提取游戏资源的三个工具支持Unity5(八十四)

    这两天无意间又发现了两个提取Unity游戏资源的工具,这会儿刚好有时间我就码点字总结一下. 一.disunity 因为之前写过了所以这里就不介绍了 .Unity3D研究院之mac上从.ipa中提取un ...

  9. [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. 网站SEO优化该如何提高用户粘度?
  2. 自定义listView添加滑动删除功能
  3. oracle管理员是sys吗,Oracle管理员sys,system登录无权限的坑
  4. [Wrong Answer] Leetcode 805 JavaScript 解决方案 数组的均值分割
  5. javascript获取当前时间
  6. USE PDFCREATE TO CREATE A PDF FILE
  7. WCF系列教程之WCF客户端调用服务
  8. android string数组转json_移动端开发基础【20】pages.json的配置项pages
  9. STM32之串口DMA例程
  10. python-教学管理系统-开发流程 草稿
  11. Steam 游戏服务器无法连接 steam 游戏无法启动 打开 microsoft store 错误代码 0x80131500
  12. ITEXT-PDF彩色字体显示-支持中文
  13. C++基础知识(7)
  14. 电脑安装不上chrome浏览器
  15. oracle出现ora 12514,ora-12514报错解决方法
  16. PHP - 下载/传输远程服务器上的文件到本地服务器
  17. CocosCreator角色动态更换武器实现
  18. 你知道小米手机便签如何导入录音和视频文件吗?
  19. 求一元二次方的根(虚根求法)
  20. html表单控件富文本框,表单控件之富文本框实践

热门文章

  1. Mysql锁定表/解锁句法
  2. 搜狐被SEC列入“预摘牌名单”!回应:不打算提出异议
  3. 顺丰控股子公司亮榛拟1000万美元参投海外投资基金
  4. 不会延期!iPhone 12S预计如期在9月发售:升级三星LTPO屏幕
  5. keep公众号就“借鉴”原创文章致歉:将停更一周
  6. iPhone 12发布前夜:富士康奖励万元招不到人,有工人国庆连轴转
  7. 腾讯再回应被骗,悬赏1000瓶老干妈求线索!老干妈:腾讯从来没有催收过
  8. 三星在美国开售低价版5G手机 吸引价格敏感消费者
  9. 魅族17系列正式发布:17年梦想之作,3699元起
  10. 4188元起!华为P40系列国行版发布:买它?