接触打飞机的游戏时都会碰见把摄像机绕 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 视图中显示内容呢。这里我们就一个摄像机,就这样表述了。