本文仅供个人记录和复习,不用于其他用途
三维坐标系
坐标系的概念其实我们在中学就学过,对于某一个物体,如果想要确定它的位置,就需要知道它的坐标。在 2D 游戏中,我们只需要一个二维坐标系就能够确立各个物体的位置,而在 Unity3D中,我们就得建立起三维坐标系。
在上图中,球体中间有三个箭头。根据右上角的坐标系可以得知,红色代表 X 轴、绿色代表 Y 轴、蓝色代表 Z 轴。
现在伸出你的右手,让食指指向 X 轴,让大拇指指向 Y 轴,然后让中指指向 Z 轴,就像下面这样:
这种坐标系叫做右手系,当然也有左手系,只不过我们这里以右手系为准。上一章讲过,我们可以用移动工具拖动拽箭头,让物体沿着轴线进行运动。
世界坐标系
打开上次的工程,点击 Sphere,在属性栏中查看 Transform 组件:
Transform 组件用于修改物体的坐标、旋转角以及缩放大小。可以看到,球体当前的坐标如上图所示。
修改坐标值,让球体坐标归于(0, 0, 0)。
那么在上图中,球体所处的位置就是世界坐标系的原点(为了方便起见,我把立方体拖到了一边)。
什么是世界坐标系?其实说白了,世界坐标系就是游戏为了定义每一个物体的位置,从而创建的一个总体上的坐标系。因此,游戏中的物体都会有一个世界坐标与之对应。
当然,游戏毕竟只是游戏,哪怕在现实世界中,也不存在一个绝对的世界坐标系能够描绘所有物体的位置。坐标系只是相对的,是我们人为设定的概念,我们只需知道在 Unity3D 中有这么一个坐标系可以表示所有物体位置即可。
局部坐标系
说完了世界坐标系,那么什么是局部坐标系呢?先来做一件事,创建一个新的球体,并把这个球体 Sphere(1) 附加到 Cube(1) 上:
如图,在 Hierarchy 视图中可以把一个物体添加到某一个物体中,即成为子对象(类似于 Cocos)。此时,子对象的位置将受到父对象的影响。现在我们来修改 Cube(1) 的位置:
修改完之后,你会发现 Sphere(1) 的位置也随着 Cube(1) 进行了改变,二者同时显示了高亮,说明两个物体相关联:
这是为什么呢?其实,当你把 Sphere(1) 添加为 Cube(1) 的子对象时,Sphere(1) 的坐标就自动映射到了 Cube(1) 的局部坐标系中,当父对象进行移动时,子对象要想相对于父对象位置不变,其世界坐标就必须要随之变化。比如我将 Sphere(1) 的坐标改为原点:
你会惊奇地发现,球体与立方体重合了。原因很简单,此时 Sphere(1) 的坐标显示的是在局部坐标系中的位置,而局部坐标系的原点就是 Cube(1) 的中心点,因此二者才会重合。
如果我们再把 Sphere(1) 分离出来,又会出现如下变化:
可以看到,Sphere(1) 的坐标又变成了世界坐标,且数值和 Cube(1) 相同。
总结
当物体处在根目录时(没有与物体连接),其坐标为世界坐标;当物体成为了子对象时,其坐标显示为局部坐标,并且位置会相对于父对象位置的改变而改变。