三维物理 - 弹珠游戏(难度:5级)
- 
					
					
					
					
 用到的相关知识介绍在这篇教程中,我们将利用物理引擎制作一个弹珠游戏:  
 第1步 - 新建一个空场景首先,在创益编程游乐场新建一个项目,删除带小狗的“角色1”,把“空的1”角色改名为“主角”。 在“主角”角色中添加如下积木,将创建一个空的三维场景、显示三维坐标轴并启用物理引擎,物理引擎的重力设置为-1000。  
 得到如下结果: 
 第2步 - 新增4个角色在这个游戏中,有4种物体:桌子、球、扳机和目标。  如同二维的Scratch项目,每种物体用一个角色来组织代码,是个好理念。因此,我们新增4个角色,分别为“桌子”、“球”、“扳机”和“目标”。  
 第3步 - 广播4条消息为了告诉每个角色建造各自的部分,我们要从主角角色广播4条消息:  
 注意,这些消息我们用的是“广播( )并等待”,这样的话,每一步完成以后才进行下一步。
 第4步 - 每个角色接收消息在这4个新角色中,第1个积木就是“当收到( )”,这样的话,每当主角角色发出消息后,其他角色就知道自己该工作了。 例如,在“桌子”角色中,我们接收消息“添加桌子”:  
 其他3个角色类似。
 第5步 - 添加带三个侧面的方形管子现在我们编辑“桌子”角色。桌子可以用一个带三个侧面的方形管子制作。我们让下端开口,从而使球有机会滚出桌子。 大家自己决定桌子的大小和颜色。比如,宽500,长1050,高110,边缘厚度可以为50:  
 添加方形管子的积木如下: 
 第6步 - 木材材质大家可以根据喜好为桌子设置材质,使桌子看起来更逼真。例如,大家可以选择材质“木材07”,大小为1000:  
 得到如下结果: 
 第7步 - 为方形管子设置物理实体现在我们为方形管子添加物理实体。因为它不动,所以质量设为0。因为我们要让球在边上反弹,所以恢复系数要高,比如80。最后,为了让球碰到边缘后旋转,我们要设置一定的摩擦系数,比如20。  
 第8步 - 添加一个斜面接下来,我们在右下角添加一个斜面,就是一个盒子,x/y/z三维度大小为200/50/100。绕z轴旋转到-45度,然后移动到 x坐标160、y坐标-410。最后添加同样的材质。  这一步的积木如下:  
 第9步 - 为斜面添加物理实体我们要为斜面添加和方形管子一样的物理实体,从而当弹珠碰到桌子的每一个边缘时都有同样的反弹效果。  
 第10步 - 将斜面复制到左边左边需要同样的斜面,用积木“复制到镜像位置”能轻松实现,模式为“左右”:  
 现在“桌子”角色就完成了: 
 第11步 - 添加球现在我们切换至“球”角色来添加球。首先添加一个直径为30的球体,命名为“球”。移动至y坐标-400、z坐标10。自己可以随意添加喜欢的材质。程序如下所示:  
 得到如下结果: 
 第12步 - 为球添加物理实体因为球要四处弹跳,所以球的质量应当大于0。那我们用默认质量100就可以了。把恢复系数设为100,会非常有弹性。摩擦系数要小一点,比如20,这样的话,当球碰到其他物体时就会旋转,但不会减速太多。  
 第13步 - 切换至顶部摄像机视角现在我们改成从顶部观看整个桌面。大家要切换至“主角”角色,添加积木“设置摄像头”,然后设置距离和视角:  
 现在看到的视角如下所示。看起来桌面像是立起来的,y轴正方向向上,y轴负方向向下。 
 第14步 - 使球“落下”现在看起来好像球是悬浮着。为了让球自动向下滚动,我们可以对其物理实体施加y轴负方向的力。切换至“球”角色并添加如下积木:  
 从现在这个视角看起来球就是“向下落”: 
 第15步 - 添加扳机盒子接下来,切换至“扳机”角色,在下部添加一个扳机盒子来托住球和击球。x/y/z三维度大小为150/40/100,然后移动至y坐标-480。大家可以随意挑选材质。  
 结果如下所示: 
 第16步 - 为扳机添加物理实体现在我们为扳机开启物理引擎。我们要将扳机上下移动,但不受球和重力的影响,所以我们把质量也设为0。把恢复系数设为80,从而使球能够反弹,当球落下来后还能托住球。把摩擦系数设为100,这样的话,如果球正在旋转,球就会被弹到不同的方向。  
 这一步完成后,球会停在扳机上: 
 第17步 - 添加圆柱体目标现在我们切换至“目标”角色,添加一些圆柱体作为目标。每当球碰到这些目标,玩家就得分。 添加第1个目标的方法如下,添加一个直径为60、高为100的圆柱体。命名为“10”,即当球碰到这一目标时玩家所得的分数。将其移动到桌面上部,y坐标300,x坐标50。  
 得到结果如下: 
 第18步 - 为目标开启物理引擎现在我们为这个目标添加圆柱体的物理实体。因为目标不动,所以质量应当为0。把恢复系数设为120,使目标非常有弹性。如果恢复系数大于100,意味着当球撞到目标时会获得额外的能量。此外,把摩擦系数设为100,就会使球旋转。  
 第19步 - 再添加3个目标将添加第一个目标的3个积木复制副本,用以添加更多目标。如下所示,这些积木再添加三个圆柱体目标,分别命名为“5”、“4”、“1”。  
 添加的目标如下所示: 
 第20步 - 扣动扳机当玩家按下空格键,我们要快速将扳机下移到y坐标-540。当玩家松开空格键,我们要将其移回初始位置y坐标-480,时间比下移时稍长。 在“扳机”角色添加如下积木:  
 现在我们就可以用板机打球了: 
 第21步 - 碰到目标时广播消息“击中目标”每当球碰到目标,我们就要展示一些视觉效果/听觉效果,并且使玩家的得分增加。 若要完成这一事件,每当球碰到目标角色中的物体时就要广播一条碰撞消息。 首先,添加积木“当收到(消息)参数( )”,点击下拉菜单新建一条消息“击中目标”。同时,新建一个变量“击中信息”。  
 接下来,在“目标”角色添加如下积木(放在添加4个目标的积木下方): 
 这个积木将确保,每当球碰到任意一个目标时都会广播这一消息。
 第22步 - 提取目标名称当我们收到消息“击中目标”,变量“击中信息”将会告诉我们哪两个物体在哪个位置碰撞了。在这个游戏中,我们只需要知道碰撞的目标的名称,即“击中信息”被逗号分隔开的第2部分。请新建一个变量“目标名称”,用于存放目标的名称:  
 比如说,“击中信息”所包含的内容为“球,1,22.696,-78.908,9.598”,那么“目标名称”就为“1”。
 第23步 - 目标高亮显示每当目标被球碰到,我们就使它短时间高亮显示白光:  
 为了做这个效果,我们要在广播碰撞消息后创建高亮层: 
 我们还要根据名称选择目标,并将其添加到高亮层,较短时间后再将其移出高亮层: 
 第24步 - 限制球的速度如果大家一直玩这个游戏,应该会发现一个小问题,有时球太快了,以至于会直接穿过目标或者是桌子边缘。  
 分步解析,物理引擎把球从位置1向上移到位置3。球从来没接触到粉色目标,所以物理引擎“不知道”两者碰到过。 
 为了解决这个问题,我们要限制球的速度,从而使球不会穿过目标。为了做到这一点,把如下积木添加到球角色中,使球的速度永远不超过1500: 
 第25步 - 整理场景现在游戏就可以玩了。最后再进入主角角色整理一下场景。 首先,隐藏三维坐标轴。 第二,大家可以选一个别的场景,或者添加别的天空作为背景。这要在设置摄像机距离之前完成。 第三,我们可以沿y轴补充一些光,让物体的侧面更明亮。  
 游戏的最终演示效果如下: 
 创意扩展大家可以把这个项目扩展成多种形式。一些创意思路如下: - 
不同的目标:大家可以把目标设置成不同的形状/颜色/大小/位置。 
- 
视觉效果/听觉效果:为了让游戏更好玩,当球碰到目标和桌子边缘时,大家可以播放声音,或者使球高亮。 
- 
游戏结束:大家可以通过检查球的z坐标来判断球是否掉落到桌子外面,如果是的话,就展示一条消息“游戏结束”。 
- 
得分:大家可以用一个新变量“得分”记录玩家的得分。每当碰到目标时就增加得分。 
- 
奖励:大家可以在桌面上添加一些游戏道具,当球碰到道具后就获得奖励。例如,大家还可以再添加一个球,玩家用两个球能碰到更多目标。 
 
-