三维 - 物理益智游戏(难度:3级)
-
用到的相关知识
介绍
在这篇教程中,大家将利用物理引擎制作一个三维益智游戏。玩家点击哪个盒子就会删除哪个盒子,目标就是让球滚进篮子里。
第1步 - 新建一个项目,带4个空角色
在创益编程游乐场新建一个项目。删除角色“角色1”,把角色“空的1”改名为“主角”。
之后再添加3个空角色,分别命名为“盒子”、“篮筐”和“球”。这样的话,我们就可以利用不同角色为场景中的不同物体编排代码积木。
第2步 - 新建一个空场景
现在我们开始编排“主角”的代码。请添加以下积木,将会创建一个空的三维场景并显示三维坐标轴。我们还要把摄像机拉远,以便于看到添加的全部物体。
大家可以用按钮“+”在“三维场景”类别快速添加这些积木:
当你点击绿旗后就得到如下结果:
第3步 - 开启物理引擎
若要在项目中使用物理引擎,要先为场景启用物理引擎。我们把重力设为-1000,会让球快速下落。
第4步 - 广播消息“添加盒子”与接收消息
现在该添加盒子了。“主角”角色向“盒子”角色发送消息,“盒子”角色将完成制作盒子的实际工作。
在“主角”角色,添加积木“广播( )并等待”,消息为“添加盒子”。“等待”将确保盒子被成功添加后再继续添加其他物体。
在“盒子”角色中,我们用如下积木接收消息:
第5步 - 添加一个带网格线的盒子
在“盒子”角色中,我们创建第一个盒子,并应用“网格材料”。盒子网格线的颜色可随意挑选。
这些积木将会在场景中央生成一个大小为100的盒子:
第6步 - 给盒子添加物理实体
现在为盒子添加物理实体。参数如下:
- 形状:因为我们应用于盒子物体,形状应当为“盒子”。
- 质量:质量设置为0,保证盒子不移动、不旋转。
- 恢复系数:设置一个较大值80%,从而使球在盒子上有较好的弹性。
- 摩擦系数:设置一个较小值30%,从而使球在盒子上滚动时不会减速太多。
第7步 - 从中心矩阵复制
现在我们要把这个盒子复制很多份,5行、5列。积木“从中心矩阵复制”专门用于此用途。注意,有2个积木包含“矩阵复制”,一定要选对。
这个积木会沿x轴左右分别复制2列。同理,会把这些列前后分别复制2行。另外,由于第1个盒子具有物理实体,那么复制出来的全部盒子都具有同样的物理实体。
第8步 - 把网格线移到边缘上
我们发现一个问题就是网格线的帮助不大。我们想要网格线显示盒子边缘,而不是盒子中心。解决办法就是在每个方向上将网格线移动50单位:
现在我们可以清晰看到5行、5列盒子:
第9步 - 上面加一层盒子
接下来,我们要在这一层盒子上方加一层盒子。我们首先添加一个新盒子,然后将其移动到第1个盒子上方。因为第1个盒子的z坐标为0,第2个盒子的z坐标应该为100。
第2个盒子在这里:
第10步 - 修改颜色并复制新盒子
现在我们可以把这个新盒子作为“种子”来制作另一层盒子。大家可以从上方复制三个积木,然后换成其他颜色:
现在制作出如下两层盒子:
第11步 - 第三层
通过“制作副本”也能快速添加第3层盒子。大家只需要修改z坐标和颜色:
现在我们就做好了全部三层盒子:
第12步 - 开启选取事件
我们要让玩家能够点击盒子即可删除。为了做到这一点,我们首先要为盒子开启选取事件:
这个积木会确保“盒子”角色中添加的全部盒子都会响应鼠标选取事件,所以我们不需要一个个盒子去处理。
第13步 - 删除鼠标选中的盒子
每当鼠标选中某个盒子,这个盒子的名称就会保存在变量“被选取物体名字”。因此,我们利用对应的名称删除盒子,如下所示:
现在大家可以尝试点击盒子以删除。注意,仍然可以拖动鼠标指针来旋转摄像机,该操作不会删除盒子。
第14步 - 消息“添加球”
现在就该添加球了。首先,我们要从“主角”角色向“球”角色发送一条命令消息。
在“主角”角色中,添加积木“广播( )并等待”,其中的消息为“添加球”:
然后在“球”角色中,添加以下积木来接收消息:
第15步 - 添加一个排球
现在我们在“球”角色中添加一个排球模型。排球大小为190,比两层盒子稍微小一点。我们还要把“z坐标偏移”设置为其高度的一半,也就是95。这是因为所有模型的原点都在其底部,但我们要让排球绕着自身的中心旋转。
第16步 - 移动排球
排球的初始位置为x: 100,y: 100,z: 400
球在盒子上方离开一定距离。球不落下是因为我们还没有给球添加物理实体,所以还不受物理引擎驱动。
第17步 - 给球添加物理实体
现在我们给排球添加一个球形物理实体。“质量”应当设置为1,从而会由于重力下落。“恢复系数”和“摩擦系数”与盒子相同。
添加过物理实体后,排球就会落下并在盒子上弹跳。当我们移除排球下方的盒子,排球会继续下落:
第18步 - 消息“添加篮筐”
这个游戏的最后一个物体就是方形篮筐。跟其他物体一样,我们要用一个新消息“添加篮筐”。
在“主角”角色中,广播这条消息:
然后在“篮筐”角色中,接收这条消息:
第19步 - 添加一个方形管子
接下来在“篮筐”角色中用代码积木制作篮筐。
篮筐可以用一个方形管子来制作,4个侧面加1个底。开口大小为200乘200,比排球稍大一点。
为篮筐应用网格材料,然后移动到盒子的前下方:
篮筐如下所示:
第20步 - 为篮筐添加物理实体
篮筐用来盛放排球,所以也需要一个物理实体。我们可以用“长方管子”形状,这种形状的物理实体只能用于长方管子。
其“质量”应当为0,这样它就不会移动。“恢复系数”也设置一个较小值,从而使排球不会弹出来。
现在就可以玩游戏了!如果排球滚到篮筐里,就会停在里面。
第21步 - 检查是否成功
如果玩家未能把球放进篮筐里,可以重新开始游戏。如果球进了篮筐,我们要有一个办法宣布玩家已经成功了。
由于球在篮筐中不会移动,所以我们可以检查2个条件:由于球没有在空中下落,球在z方向的速度应当为0。球的z坐标应当为一个固定值。我们在“球”角色中运行这个积木即可找出z坐标。
因此,我们只需在“球”角色中重复不断检查这二个条件:
第22步 - 添加标签控件“成功!”
当玩家成功后,我们可以显示一个大标签“成功!”,这可以用标签控件来做。请添加“控件”扩展,然后在“球”角色中添加如下积木:
注意:大家首先要运行积木“添加标签”,在舞台上添加标签之后,再添加积木“为控件设置背景”和“为控件设置字体”,并从下拉菜单中选择“标签1”。
第23步 - 调整“添加球”和“添加篮筐”的顺序
如果大家现在运行项目,会发现场景中没有添加篮筐。原因就是,在“主角”角色中我们等着“添加球”完成以后才能添加篮筐。然而,由于消息“添加球”会触发“球”角色中的“重复执行”循环,这个循环永远不会停止,我们就要永远等下去。
若要解决这个问题,请进入“主角”角色,调整这2条消息的顺序:
第24步 - 整理
最后,整理一下场景,在“主角”角色做3个小改动。第一,换成“蓝天”场景。第二,隐藏三维坐标轴。第三,把摄像头的俯视角度设置为65度。
游戏的最终演示效果如下:
创意扩展
现在大家学会了如何制作基本的游戏,有很多办法来改进这个游戏:
-
把球/篮筐换个位置:把球和篮筐移动到别的位置,玩游戏就要用不同的方法。
-
不同的盒子:把盒子摆放在不同位置,可以摆放无限种形式。
-
倾斜的盒子:盒子可以稍微倾斜一点,制作一些有趣的斜坡。
-
某些盒子不可删除:为了让游戏增加难度,大家可以让某些盒子不可删除。玩家就必须想办法绕过障碍物。
-
奖品:为了让游戏更好玩,大家可以在场景中放置一些奖品。例如,大家可以在盒子里放一枚金币,如果球碰到这枚金币,球就缩小一半或者场景中出现一些新盒子。
-
游戏规则:大家可以添加一些游戏规则,比如时间有限、删除的盒子数量有限。另外,大家可通过检查球的z坐标来判断玩家是否失败。
-
游戏升级:当玩家完成一个级别的游戏后,可以显示一个按钮让玩家进入下一个级别继续玩。