接触打飞机的游戏时都会碰见把摄像机绕 x 轴顺时针旋转 90°形成俯瞰的视角的去看飞船。也没有多想,就感觉是坐标系绕 x 轴旋转 90°完事了。但是昨天用手比划发一下发现不对。我就想这样的话绕 x 轴顺时间选择 90°坐标系旋转了,Game 视图中的平面还是 xy ,可实际为什么平面变成了 xz 呢?

摄像机不是其他的 gameobject 的 child 且 rotation 是 (0, 0, 0) 此时可以左手坐标系查看 Game 视图中的物体,Game 视图平面在 xy 平面,z 轴表示物体的远近。如下图所示。物体顺着蓝色箭头(z 轴)的方向移动,则会越来越远,此时物体的 z 轴坐标值越来越大。

此时然后我以 0 30 60 90 调节摄像机的 x 轴上的 rotation ,发现摄像机照射的区域也在旋转。当摄像机的 rotation 是 (90, 0, 0) 时如下图所示。图中蓝色箭头此时是 y 轴,虽然箭头向下,但并不表明顺着这个箭头移动 y 轴值的会越来越大,相反反而会越来越小,但是顺着蓝色箭头移动在 Game 视图中物体是越来越远的(注意:我是在 Unity 5.2.3 版本)。

经过思考后我理解了为什么摄像机绕 x 轴旋转 90°Game 视图中的平面就变成了 xz 平面。

  • 摄像机绕 x 轴旋转,仅仅是摄像机的照射区域发生了变化,从原来的基础上顺时针旋转了 90°。如果 gameobject 不是摄像机的 child ,此时不影响到 gameobject 。
  • 虽然非摄像机的 child 的 gameobject 不会受摄像机的旋转影响,但是 gameobject 移动在 Game 视图中显示发生了变化。因为可以理解摄像机本身的坐标系没有旋转,而是投射区域旋转,投射区域绕 x 轴顺时针旋转 90°时(假设以前的 rotation 是 (0, 0, 0) ),刚好投射平面(也就是 Game 视图)从 xy 平面变成了 xz 平面。
  • 我在 Scene 视图中被蓝色箭头的指向误导了,以为蓝色箭头就是 z 轴,顺着这个箭头移动 z 轴的坐标值就会增大,很显然不是这样。所以就不明白 Unity 这样显示箭头是为了什么目的。我印象中在 Unity4.6 中摄像机绕 x 轴旋转时,Scene 视图中的摄像机坐标系显示是没有变化的,看来不同版本也是有差别的。
  • 上图用 Game 视图表示摄像机的投射平面不是太准确,实际情况下很有可能多个摄像机在 Game 视图中显示内容呢。这里我们就一个摄像机,就这样表述了。

Unity 摄像机旋转初探的更多相关文章

  1. Unity摄像机围绕物体旋转两种实现方式

    第一种,使用Transform 函数 RotateAround. 代码如下: public Transform target;//获取旋转目标 private void camerarotate() ...

  2. Unity 摄像机组件

    今天看一下unity3d里面的摄像机是怎么调用和操作的. 打开unity3d新建一个工程.在我们打开工程的时候unity3d会主动添加一个Main Camera,在Hierartchy视图中.点击Ma ...

  3. Unity 摄像机Clear Flags和Culling Mask属性用途详解

    原文地址:http://blog.csdn.net/tanmengwen/article/details/8798231 1.简述两个属性 1.1 Clear Flags 清除标记 每个相机在渲染时会 ...

  4. Unity摄像机的正交视图与透视图

    Unity Camera的两种模式 Projection:投射,投影 Unity的MainCamera的Projection可选择Perspective[透视],Orthographic[正交],是指 ...

  5. unity的旋转

    绕着一个点旋转 : transform.RotateAround(Vector3.zero, Vector3.up, speed* Time.deltaTime ); 第一个参数,点的位置.第二个参数 ...

  6. [转]Unity 3D旋转矢量方向及二维平面基于一点选择另一点(Rotate a Vector3 direction & Rotate a point about another point in 2D )

    http://specialwolf.blog.163.com/blog/static/124466832201301332432766/ ****************************** ...

  7. unity 对象旋转,自转

    1.对象具体的围绕哪个轴旋转,对应的设置值: transform.Rotate(new Vector3(1,0,0));  //绕x轴旋转    //默认是物体围绕世界坐标的XYZ轴旋转,即物体绕着世 ...

  8. Creator4.2建模心得与技巧1——树的建立与跟随摄像机旋转

    Creator建模: 树一般在虚拟现实程序中都用面来实现,一种方法是通过两个面相互垂直成90度叠放在一起,另一种方法是让树面正对着视角一起旋转.这里主要说一下第二种方法. 主要思路:把树面一直正对着摄 ...

  9. Qt irrlicht(鬼火)3D引擎 摄像机旋转问题

    点击打开链接Irrlicht中的摄像有一个函数 setUpVector() if (m_device != 0 ) { core::vector3df rotation(y,x,0.f); m_cam ...

随机推荐

  1. Android学习笔记(36):Android的两种事件处理方式

    Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...

  2. jenkins构建一个python项目

    Jenkins发布后端python代码 “系统管理”“管理插件”“已安装” 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它 ...

  3. Build Your Jekyll Blog (On Github)

    http://kevinjmh.github.io/web/2014/04/20/build-your-jekyll-blog/ 20 April 2014 On GitHub Follow the ...

  4. Linux内核中链表的学习

    一.自己学习链表 数组的缺点:(1)数据类型一致:(2)数组的长度事先定好,不能灵活更改. 从而引入了链表来解决数组的这些缺点:(1)结构体解决多数据类型(2)链表的组合使得链表的长度可以灵活设置. ...

  5. C#.Net调试时调无法“编辑并继续”

    ‘启用编辑并继续’的作用是允许用户在调试的过程中修改源代码,并且修改的代码会编译到调试进程中立刻生效. 在调试时,无法查到变量的值,也无法编辑,若编辑会跳出如下弹框: 解决方法: 1:如下图,选择De ...

  6. QTreeWidget里嵌套表格QTableView

    InformationPositionSubTableView::InformationPositionSubTableView(QStringList& columnNameList,QLi ...

  7. hdu 1203 I NEED A OFFER!(01背包)

    题意:"至少一份offer的最大概率".即求拿不到offer的最小概率 (得到offer的最大概率 = 1 - 反例的最小概率). 状态转移方程:dp[j]= Min(dp[j], ...

  8. struct timeval 和 struct timespec

    struct timeval { time_t tv_sec; suseconds_t tv_usec; }; 測试代码例如以下: #include <stdio.h> #include ...

  9. git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  10. os如何处理键盘的所有按键,显示or不显示,显示是如何显示

    [0]README 0.1) source code and text decription are from orange's implemention of a os , and for comp ...