三维物理 - 汽车冲撞盒子墙(难度:3级)
-
介绍
在这篇教程中,大家将制作一个简单的物理仿真游戏。玩家将驾驶汽车冲撞一摞盒子,能撞飞越多盒子得分越高。
第1步 - 新建一个带物理引擎的空场景
首先,在创益编程游乐场新建一个项目,删除带小狗的角色1,然后把“空的1”改名为“主角”。
在“主角”角色中,添加以下积木。将创建一个空的三维场景,显示三维坐标轴,并启用物理引擎,重力为-1000.
得到如下结果:
第2步 - 添加一个广阔的地面
接下来,利用平面添加一个广阔的地面,宽4000,长15000,然后为地面添加网格材料,大家可以用自己喜欢的颜色:
制作的地面如下所示:
第3步 - 为地面设置物理实体
地面不能动,所以质量应当设置为0。其恢复系数和摩擦系数对于这个游戏来说并不重要。设置物理实体的积木如下:
第4步 - 添加一个坡道
接下来,我们为汽车添加一个坡道,就是一个小平面,宽600,长1000。大家可以根据喜好添加网格材料。把坡道绕x轴旋转一个小角度,比如15度,然后移到前面,以便于给汽车留一些加速空间。
汽车坡道如下所示:
第5步 - 为坡道设置物理实体
为坡道设置与地面相同的物理实体:
第6步 - 广播2条消息
到目前为止,我们已经搭建好了平台。接下来,我们就要添加靶位盒子和玩家的汽车。做法就是,在“主角”角色广播如下这2条消息:
第7步 - 角色“靶子”
要添加靶位盒子,最好在一个新角色中来做。添加一个空角色并命名为“靶子”,然后在这个角色中接收“添加靶子”事件:
第8步 - 添加盒子墙
为了在角色“靶子”中添加盒子墙,我们可以用2个新变量“x”和“z”,并用2个嵌套的遍历循环来控制这2个变量。盒子大小为100,第1个变量循环的x坐标从-200走到200,第2个变量循环的z坐标从50走到450。盒子的y坐标都相同,为5500。添加盒子的积木代码如下:
添加的盒子墙如下所示:
第9步 - 设置不同颜色
为了让盒子外观各不相同,我们可以为每个盒子应用随机颜色的网格材料:
现在的盒子墙如下:
第10步 - 为盒子墙设置物理实体
最后,我们需要为每个盒子设置物理实体,只有这样才能让汽车与盒子相撞。设置一个较大的摩擦系数,以便于盒子不太容易滑动:
第11步 - 角色“汽车”
现在我们准备添加汽车了。和之前一样,我们还是在一个新角色中操作,新角色命名为“汽车”,在这个角色中处理消息“添加汽车”:
第12步 - 添加汽车模型
首先,我们添加“赛车”模型,高度为50。
添加的“赛车”模型如下:
第13步 - 启用汽车仿真模拟
接下来就是本教程最重要的一步,用如下积木[启用汽车模拟]:(/topic/750/car-with-physics-simulation):
汽车的质量是单个盒子的10倍。较大的恢复系数将会使汽车撞到盒子后将盒子飞弹出去。轮胎摩擦系数10%会使轮胎有点打滑,这样的话,当前轮转向时,车身就会有点漂移。
第14步 - 添加跟踪摄像机
现在我们添加一个跟踪摄像机,当汽车转向时会跟随汽车。“主方向”设置为“自由”,以便于玩家能够随时缩放和转动摄像头。
跟踪摄像机的新视角如下所示:
第15步 - “D”、“A”键控制方向
现在要让玩家能够用键盘驾驶汽车。我们用一个无限循环来检查按键。
首先,我们处理前轮的转向角度。当按下“D”健,我们让车轮右转15度;当按下“A”健,左转15度;如果没有按下按键,车轮笔直向前。
从车底可以清晰看到前轮的动作:
第16步 - 按“W”键向前行驶
接下来我们要处理发动机动力和刹车系数,这两项独立于转向角度。
当按下“W”键,我们设置一个较大的正数动力,设置刹车系数为0。
第17步 - 按“S”键向后行驶
同理,如果按下“S”键,我们就要把发动机动力设置成负数,从而使汽车倒退:
第18步 - 按“空格”键刹车
当按下“空格”键,我们就要把发动机动力设置为0,刹车系数设为10%。这样的话,汽车就会重复不断减速10%。如果没有按下任何按键,我们把发动机动力和刹车系数都设为0。
第19步 - 星空背景
最后,为了让场景更美观,我们可以在“主角”角色中设置一个星空背景,还要隐藏三维坐标系:
游戏最终演示效果如下:
创意扩展
在这篇教程的基础上,大家可以改编成更有趣的游戏,以下是一些思路建议:
- 不同的靶子:大家可以更改盒子墙的位置、形状和数量,盒子不必都叠在一起。
- 不同的坡道:大家可以设计不同的坡道,还可以提供多个坡道。
- 不同的目标:玩家把所有盒子都撞出平台就算完成游戏。