三维物理 - 蜘蛛侠篮球(难度:5级)
-
用到的相关知识
介绍
在这篇教程中,大家将利用物理引擎制作一个有趣的篮球游戏:
思路就是,用绳子将篮球与空中的挂钩相连接,篮球就会像蜘蛛侠一样摇荡。玩家可以决定什么时候添加绳子、什么时候去除绳子,从而让篮球落进篮筐里。
第1步 - 新建一个带物理引擎的空场景
首先,在创益编程游乐场新建一个项目,删除带小狗的角色1,然后把“空的1”角色改名为“主角”。
在主角角色中添加如下积木,将创建一个以蓝天为背景的三维场景,显示三维坐标轴,并启用物理引擎,重力为-500。
得到如下场景:
第2步 - 制作4个新积木
在这个游戏中,4个主要的组件分别为篮筐、挂钩、篮球及其托盘。我们制作4个新积木来组织积木代码:
第3步 - 用方形管子制作篮筐
制作篮筐的方法,我们可以使用开口的方形管子。如下三个积木将添加一个方形管子,开口大小为150×150,深度为80。为篮筐设置“方形管子”形状的物理实体,质量设为0以使其停留在空中。恢复系数设为0,这样球就不会弹出去。摩擦系数设为100,能减慢球的滚动。篮筐上绘制绿色方格和白线。
就得到如下篮筐:
第4步 - 移动并转动篮筐
接下来,我们将篮筐沿着y轴向前移动,以便于篮球有一些摇摆的空间。另外,我们将篮筐绕x轴旋转45度,以便于使其开口朝向我们。
篮筐的新位置如下:
第5步 - 添加挂钩
现在我们制作挂钩。我们用一个圆环来表示挂钩。对于圆环的物理实体,因为没有“环状体”,我们只需要用“球体”或“盒子”。挂钩的形状无关紧要,因为它不会与其他物体碰撞。因为圆环要保持静止,所以其质量设为0。恢复系数和摩擦系数都不重要。大家可以随意添加一种颜色的网格材料。
做出来的挂钩如下:
第6步 - 移动并转动挂钩
为了让篮球能摇摆较长距离,挂钩需要移动到很高的位置。另外,挂钩应当竖立。用如下2个积木实现:
现在挂钩如下所示:
第7步 - 制作篮球托盘
篮球托盘就是位于篮球下方的一个小平面。游戏开始后,篮球会在托盘上弹跳,一直到用户将篮球连接到挂钩。
我们把托盘放到y坐标-500处,那么当篮球连接到挂钩时就会向前摇摆。为了让篮球反弹,托盘的恢复系数要设为100%。
托盘如下所示:
第8步 - 添加篮球
最后一个组件就是篮球。注意,篮球要命名,并且需要将z偏移设为25,也就是其高度的一半。
篮球要放在托盘的正上方。恢复系数也必须为100%,以便于从托盘上弹跳。此外,篮球的摩擦系数要设为100%,以便于落入篮筐之后快速停止滚动。
现在大家运行程序,就会得到如下弹跳的篮球:
第9步 - 添加跟踪摄像机
因为篮球要向前摆动,所以我们要用跟踪摄像机来跟踪篮球。使摄像机拍摄篮球的角度和水平夹角为45度,以便于判断何时将篮球与挂钩连接、何时断开连接。我们还要把摄像机设置为“自由”模式,这样的话玩家就能自由调节摄像机。
现在篮球位于摄像机视野中央:
第10步 - 添加按钮控件
为了让玩家将篮球与挂钩连接、断开连接,我们用一个按键事件或者按钮点击事件。在这个项目中,按钮是个更好的选择,因为玩家可以在手机或者平板上玩这个游戏。
后面这个积木将在舞台右下角添加一个按钮。因为玩家第1个操作是把篮球与挂钩连接,所以我们要在按钮上显示“连接”。
按钮的默认样式如下:
第11步 - 修改按钮样式
为了让按钮更美观一些,我们用下面这2个积木修改其背景和字体样式:
现在按钮如下所示:
第12步 - 将篮球与挂钩连接
现在我们准备做本项目最重要的一步。为了让篮球看起来像是用绳子连接到挂钩上,我们要做两件事。
- 第一,我们要添加一个距离约束,让篮球与挂钩保持相同距离。有了距离约束,篮球就不会下落,而是在挂钩下面来回摆动。
- 第二,我们要在篮球与挂钩之间连一条线,用来表示“绳子”。注意,我们用的是可移动的线,绳子会随篮球移动。
注意,当我们添加距离约束时,第1个输入框应当为“挂钩”,因为挂钩是静止的,而篮球要摇摆。“可移动的线”将随篮球移动,为了让线看起来像绳子,我们将其纹理改为“地毯”。
现在如果我们点击“连接”,就会出现一根绳子,看起来好像篮球在摇摆。
第13步 - 删除篮球托盘
当篮球绕挂钩摇摆时,有时还会碰到篮球托盘:
为了解决这个问题,当我们将篮球与挂钩连接后,删除篮球托盘即可:
第14步 - 游戏分阶段
篮球与挂钩连接后,玩家的下一个操作就是断开连接,这一操作会将篮球抛向篮筐。为了让用户界面简洁,这一操作我们还是用同一个按钮。
由于我们将同一个按钮用于不同的用途,我们想一个办法来跟踪当前的“游戏阶段”。在这个游戏中,有3个阶段:
- 第1阶段:从游戏开始到玩家将篮球与挂钩连接;
- 第2阶段:从玩家将篮球与挂钩连接到玩家将二者断开连接;
- 第3阶段:篮球与挂钩断开连接之后。
我们可以用一个变量“阶段”来表示游戏处于哪一阶段。新建这一变量,在游戏开始时将其设置为1:
第15步 - 在第1阶段点击按钮
现在,当点击按钮时我们就可以运行不同的积木代码。只有当变量“阶段”为1时才运行现有这些积木代码:
第16步 - 为第2阶段做准备
完成第1阶段后,我们要进入第2阶段,就要把变量“阶段”更新为2。同时,我们要把按钮改为显示“断开链接”,因为玩家要在第2阶段断开绳子:
现在当我们点击按钮时,按钮就会改变:
第17步 - 在第2阶段点击按钮
在第2阶段,当用户点击按钮后,我们就应当移除距离约束和绳子,从而让篮球自由飞出去。同时我们还要删除按钮,因为玩家不需要再操作什么了。然后把变量“阶段”更新为3。
现在就可以玩游戏啦!点击“连接”即可添加绳子,点击“断开连接”即可抛出篮球:
第18步 - 检查成功与否
在第3阶段,我们要检查篮球是否落入篮筐中。我们可以用一个无限循环每秒检查一次:
第19步 - 检查篮球的位置和速度
如果篮球已经落入篮筐中,就不会再动了,其z坐标应当不变。我们可以用如下这两个“获取”积木检查两个值:
z速度应当接近0,z位置应当约为-131.8。我们用这两个条件检查成功与否,如果成功就显示一个标签。
现在我们就会得到如下的成功消息:
第20步 - 修改标签样式
为了让标签更美观一些,我们可以修改其背景和文字样式:
现在的成功消息如下所示:
第21步 - 整理程序代码
最后要整理一下程序代码,要隐藏三维坐标轴:
游戏最终演示效果如下:
创意扩展
大家可以把这个项目扩展成多种形式。以下是一些思路:
-
修改参数:大家可以把篮球、挂钩和篮筐移到别的位置。可以更改篮球或篮筐的大小,还可以更改场景的重力。
-
2个挂钩:从第1个挂钩断开连接后,可以让玩家在第三阶段再连接到另一个挂钩,然后在第4阶段断开连接。第2个挂钩还可以在不同方向上。这就会让游戏更有难度。示例如下:
- 障碍物:为了让游戏更具挑战性,大家可以添加一些静止的障碍物,玩家必须要躲避障碍物。