首页 > Unity3D频道 > 【Unity杂文】 > Unity3D研究院之获取摄像机的视口区域
2014
07-31

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

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

Unity3D研究院之获取摄像机的视口区域 - 雨松MOMO程序研究院 - 1

 

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

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

我们可以根据文章里的算法计算出视口3D的坐标点,有了坐标信息那么想干什么都好干了,呵呵。

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之获取摄像机的视口区域》有 15 条评论

  1. 王文刚2011 说:

    这个很酷,我使用了,啊。
    同时,做了一些拓展,“无耻的”放到我的博客里面了,呵呵: http://www.xifarm.com/cameraviewex/

  2. 韩肖肖 说:

    如果知道四个坐标能不能设置视窗口的大小啊,求解啊,困扰我几天了

  3. goodspeed2012 说:

    知道视口3D的坐标点, 如何获取物体的顶点坐标,并判断物体全部在视口区域呢?

  4. 雨田 说:

    如何判断一个Plane全部在视口区域(黄线框和红线框组成的区域)?

  5. U3d小菜 说:

    雨松大大,你发的老外的链接下面,还有更简便的方法。 /// /// Gets the corners. /// /// Camera. /// Distance. /// Corners. public static void GetCorners(Camera camera, float distance, ref Vector3[] corners) { Array.Resize(ref corners, 4); // Top left corners[0] = camera.ViewportToWorldPoint(new Vector3(0, 1, distance)); // Top right corners Unity3D研究院之获取摄像机的视口区域 - 雨松MOMO程序研究院 - 1 = camera.ViewportToWorldPoint(new Vector3(1, 1, distance)); // Bottom left corners Unity3D研究院之获取摄像机的视口区域 - 雨松MOMO程序研究院 - 2 = camera.ViewportToWorldPoint(new Vector3(0, 0, distance)); // Bottom right corners Unity3D研究院之获取摄像机的视口区域 - 雨松MOMO程序研究院 - 3 = camera.ViewportToWorldPoint(new Vector3(1, 0, distance)); }

  6. 路人 说:

    大牛啊 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊 啊啊啊 高潮了

  7. 哈哈,松哥翻译的很容易理解~~~ Unity3D研究院之获取摄像机的视口区域 - 雨松MOMO程序研究院 - 1

  8. 洪峤 说:

    想干什么都好干了,能举些例子都能干些什么吗?

留下一个回复

你的email不会被公开。