2.1 维度和坐标系统
尽管电子游戏光彩夺目,魅力无穷,但它们本质都是一些数学结构,其所有的属性、运动和交互都可以归结为数字。对你来说幸运的是,许多“地基”都已经打好了。数学家们埋头苦干了几个世纪来发现、发明和简化不同的过程,正因如此,你可以利用现代软件轻松地构建出游戏。你可能认为游戏中的对象只是随机地存在于空间中,但实际上每个游戏空间都具有维度,并且每个对象都被放置在某一种坐标系统(或网格)中。
2.1.1 走进3D
如前所述,每款游戏都会使用某种级别的维度。可能你熟悉的、最常见的维度系统是2D和3D系统,也就是二维(Two-Dimensional)和三维(Three-Dimensional)的缩写。2D系统是一个平面系统,在2D系统中,只需处理垂直和水平元素(也就是上、下、左、右)。
像Tetris、Pong和Pac Man这样的游戏就是2D游戏的良好示例。3D系统和2D系统类似,但它显然多一个维度。在3D系统中,不仅具有水平和垂直方向(上、下、左、右),还具有深度(里和外)。图2.1很好地表现了2D正方形和3D立方体。注意3D立方体中的深度轴,它让立方体像是“凸出来”了一样。
图2.1 2D正方形和3D立方体
小记 关于2D和3D
Unity是一个3D引擎,因此,在其中所创建的项目默认都是3D的。事实上,现在也不存在纯粹的2D游戏了,现代的处理器会将它们都视为3D的对象来渲染,2D游戏也存在z轴,只是不使用。你可能想知道为什么本书还要涵盖2D系统,那是因为,即使是在3D项目中,仍然有许多2D元素。纹理、屏幕元素和绘图技术都使用2D系统。Unity的2D游戏工具包很丰富,而且2D系统不会很快退出舞台。
2.1.2 使用坐标系统
维度系统在数学上等价于坐标系统。坐标系统使用一系列直线(称为轴)和位置(称为点),这些轴直接对应于它们所模拟的维度。例如,2D坐标系统具有x轴和y轴,它们分别代表水平和垂直方向。如果在水平方向上移动一个对象,就称为“沿着x轴”移动。同样,3D坐标系统使用x轴、y轴和z轴,分别代表水平、垂直和深度方向。
小记 常用的坐标系统
在谈到对象的位置时,一般会列出它的坐标。称对象在x轴上是2、在y轴上是4可能有点麻烦,还好有一种对坐标的简写方式:在2D系统中,采用(x, y)这样的形式书写坐标;在3D系统中,则写作(x, y, z)的形式。因此,可以将上述的例子写作(2, 4)。如果那个对象在z轴上的值是10,则写作(2, 4, 10)。
每种坐标系统都有一个所有的轴相交的点,这个点称为原点。原点的坐标在2D系统中总是(0, 0),在3D系统中则是(0, 0, 0)。这个原点非常重要,因为它是得到其他所有点的坐标的基础。其他点的坐标是该点沿着每根轴相距原点的距离。当移动某个点使之远离原点时,它的坐标值的绝对值将变大。例如,右移一个点时,它的x轴的值将变大;左移它时,x轴的值将变小,而当它经过原点后,点的x轴绝对值将再次开始变大,但它也会变成负数。如图2.2所示,这个2D坐标系统中定义了3个点。点(2, 2)在x轴正方向上和y轴正方向上都距离原点2个单位,点(−3, 3)在x轴负方向和y轴正方向上都距原点3个单位,点(2, −2)在x轴正方向和y轴负方向上都距原点2个单位。
图2.2 原点和其他点的关系
2.1.3 世界坐标和局部坐标
你现在学习了游戏世界的维度以及组成它们的坐标系统。迄今为止我们使用的是世界(World)坐标系统。在任何时候,世界坐标系统中都只有一根x轴、y轴和z轴。同样,所有的对象都共享唯一一个原点。你可能不知道的是,还有一种所谓的局部(Local)坐标系统。这个系统对于每个对象而言都是独特的,并且独立于其他的对象。局部坐标系统具有它自己的轴和原点,其他对象不会使用它们。图2.3用两种坐标系统展示了一个正方形的4个点,阐释了世界坐标系统与局部坐标系统之间的区别。
图2.3 世界坐标系统(左)和局部坐标系统(右)
或许你会疑惑,如果世界坐标系统是用来定位对象的话,那局部坐标系统又是用来干什么的?在本章后面,将探讨游戏对象的变换以及设置游戏对象的父对象,它们都需要使用局部坐标系统。