Unity3D学习笔记(6)——世界坐标系和局部坐标系

本章将介绍U3D中的坐标系。

本文仅供个人记录和复习,不用于其他用途

三维坐标系

坐标系的概念其实我们在中学就学过,对于某一个物体,如果想要确定它的位置,就需要知道它的坐标。在 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) 相同。

总结

当物体处在根目录时(没有与物体连接),其坐标为世界坐标;当物体成为了子对象时,其坐标显示为局部坐标,并且位置会相对于父对象位置的改变而改变。