碰撞检测与物理

创建平台游戏最激动人心的部分之一就是创建玩家自身的动作。 但是,在开始研究机芯之前,我需要设置玩家物理上的两个重要方面。 此过程的第一个也是最重要的部分是确保玩家可以与平台和地面碰撞,否则它将掉入虚无。 第二个重要部分是向玩家添加一些物理方面的知识,以使其受到重力的影响。 如果玩家没有对其施加重力,那么他们在跳跃后只会漂浮在空中,而不是着陆。 在Unity中,您可以向游戏中的对象添加组件。 这些是预制脚本或开发人员编写的脚本,其中包含向对象添加功能的代码。 这些预制组件之一是RigidBody2D。 该组件为元素添加了一些物理规则(例如,赋予其质量以使其受重力影响,指定对象可以移动的方向并允许其旋转)。 我将RigidBody2D添加到了播放器的sprite中,以便它将落在屏幕上,直到到达地面为止。 但是,由于玩家对象无法判断它是否已经到达地面,因此它当前会直接掉落并继续掉出屏幕。 这是不理想的。

为了帮助玩家识别何时到达地面,我必须对玩家和地面物体都添加一些碰撞检测。 这确保了当玩家物体与地面物体碰撞时(即,当一个物体撞击另一个物体时),玩家停止移动。 为此,我在对象中添加了两个对撞机组件,对播放器对象添加了PolygonCollider2D,对图块添加了BoxCollider2D。 盒碰撞器为正方形的对象提供碰撞半径。 这对地面物体也是方形的,因此非常适合地面物体,因此对撞机将完美地贴合在瓷砖的边缘。 由于玩家的形状不是基本形状(例如正方形,圆形或三角形),因此我需要使用可以更改为任何形状的对撞机,以使碰撞区域尽可能靠​​近玩家的区域。 Polygon Collider满足了这一需求,因为它的边缘和形状更加灵活。 这使我可以使对撞机的边缘更靠近玩家图像的边缘。 下面的玩家精灵图像周围的绿线是对撞机的形状。 它并不完美,但可以满足我的需求。

大! 现在我的播放器降落在地面上了,我可以开始进行移动了! 观察重力和对撞机的作用: