三维 - 跳板游戏(难度:5)
-
介绍
在这个小教程里,你会做一个有趣的跳板游戏:

玩家需要通过奔跑和跳跃达到终点,而且最快到达的玩家会被显示在一个排行榜上。
第 1 步 - 草地场景
作为开始,请你在创益编程平台上创建一个新的项目,去掉用不到的小狗角色,然后把另外一个空白的角色命名为"玩家".
在这个玩家角色里,添加下面这些积木。它们会创建一个草地三维场景,同时显示三维坐标系。

程序的运行结果如下:
第 2 步 - 添加 3 个新角色
这个“玩家”角色将包含所有用来创建和控制玩家化身的程序。这个游戏还有另外3个组成部分:
- 平台:所有的跳板
- 目标:目标区域
- 控制:游戏控制逻辑
因此,请添加 3 个空白的角色,并将它们命名为“平台”、“目标”和“控制”。

第 3 步 - 广播 3 条消息
在添加玩家化身之前,让我们先在其他 3 个角色中把其它游戏元素搭建起来。我们可以先在“玩家”这个角色里发送 3 条消息,并等待它们全部处理完。

第 4 步 - 添加第一个跳板
现在让我们切换到平台角色。当它受到了“添加平台”的消息时,它会添加第一块跳板。它将是一个 400 x 400 的方盒子,厚度为 10。你可以选择任何纹理,例如“木材07”。

它应该是这样的:
第 5 步 - “Z 起点”变量
所有的跳板都会漂浮在空中,这样如果玩家化身从跳板上掉下来就会输掉比赛。但是,此时,我们还不确定这些跳板应该在多高的位置。因此,我们可以使用一个名为“Z 起点”的新变量,并使用这个变量来设置我们板的 z 位置。我们暂时将此变量设置为 100,这样便于我们测试程序,而且以后我们可以很容易把这个变量的值变大。

现在这个跳板会浮动在 100 的 Z位置:
第 6 步 - 复制到第二块跳板
在添加第二块跳板的时候,虽然我们可以添加一个新的盒子,更好的方法是复制第一块跳板。这样不仅速度会更快,还能节省一些存储空间。
复制第二块跳板后,我们可以使用“更新大小”积木来改变它的大小和形状。例如,我们可以让它在 X 方向上宽 200,在 Y 方向上长 800。

现在新跳板将与第一块跳板重叠很大一部分:
第 7 步 - 移动第二块跳板
现在让我们决定将第二块跳板移动到哪里。如果你不确定它的新坐标是什么,可以先使用“位置工具”拖动它到理想的位置。在下面的示例中,我们将第二个跳板沿着Y轴向前拖动,然后添加“移动到”积木,其中的参数将自动被设为当前物体的位置。我们仍然可以更改这些位置值,例如将 Y 位置四舍五入到 800。为了让它与第一块板处于同一水平高度,我们仍将使用“Z 起点”作为其 Z 位置。

第 8 步 - “添加跳板”积木
每当我们添加新跳板时,我们都会使用相同的一组积木:复制、更新大小和移动。因此,如果我们为这一组步骤定义一个新的块,将使我们的程序更加简洁。我们仍然通过一些输入参数来定制每个跳板的大小和位置。
请创建一个名为“添加跳板”的新积木,其中包含 5 个输入,如下所示:

然后将已有的 3 个积木移动到这个新积木的定义中,并应用 5 个输入积木。
现在我们可以使用这个新积木来添加第二块跳板:
第 9 步 - 再添加 4 个跳板
现在你可以使用新的积木“添加跳板”来随意添加更多的跳板。这里有些例子。请注意,你可以将 Z 位置设置在第一块跳板的上方或下方,只需要在“Z 起点”上增加一个正数或负数。

它们看起来像这样:
第 10 步 - 添加玩家化身
现在平台已经准备就绪,我们可以切换回到“玩家”角色。
首先,让我们添加一个新的化身。你可以选择系统提供的任何头像。给化身添加 3 个动画能力:“跳在空中”、“跑”和“胜利”。将它移动到第一个跳板上方( Z 位置 200)。
另外,让我们添加一个追踪摄像头来跟随化身移动。它的“z 偏移”应该是 50,即化身高度的一半。这杨摄像头将瞄准化身的腰部而不是脚部。

化身看起来像这样:
步骤 11 - 重力和碰撞
为了让化身向下降落(而不是漂在空中),我们需要给它设定重力。比如说,我们可以把重力设置为 800 。如果你使用更大的数值,化身会下降得更快。
为了让化身站在跳板上(而不是从跳板中穿过去),我们需要开启化身和其他所有角色(包括跳板和目标)之间的“碰撞”。注意,对于化身和模型,我们需要把“z 位移”设置为高度的一半。

现在化身将落在跳板上并站在上面:
第 12 步 - 控制玩家化身的主循环
现在我们添加玩家化身的重复循环,通过处理键盘事件来控制化身的运动。由于化身可能在跳板上或在空中,我们可以分别定义 2 个新的积木来处理这两种场景:“在空中”和“已着陆”。
为了判断化身是否接触到跳板,我们可以使用“角色物体在下方被阻止”积木。如果化身被其下方的任何障碍物阻挡,这个积木将报告数值 1。

第 13 步 - 添加 “设置方向” 积木
在“已着陆”积木的定义中(仍在玩家角色中),我们首先需要设置化身面向的方向,然后设置它的速度。我们可以创建一个新的积木“设置方向”,专门用于设置化身的方向,这样我们的程序会更容易阅读和修改。

第 14 步 - 设置按下“w”时的前进方向
现在让我们在玩家角色中定义之前创建的“设置方向”积木。当“w”键被按下时,我们希望化身朝向与摄像头相同的方向。这样,玩家可以通过旋转摄像头来控制化身向前移动的方向。
我们可以使用摄像头的“侧视角度”属性(也就是水平旋转角度)读出它当前的方向,然后让化身面向那个方向。

现在如果我们再次运行这个项目,我们可以拖动鼠标左键来旋转摄像头,然后按“w”将化身转向我们观看的方向。事实上,当我们旋转摄像头时,如果我们一直按住“w”键,化身将一直保持与摄像头相同的方向。
第 15 步 - 处理其他 3 个方向
其他 3 个方向的逻辑非常相似。 “s”键将使化身朝向摄像头,与相机的方向相反。 “a”和“d”键将使化身面向左侧或右侧。

现在化身可以根据当前摄像头的方向转向这 4 个方向:
第 16 步 - 处理 4 个对角线方向
为了让玩家更好地控制化身,让我们再添加 4 个对角线方向的逻辑。例如,当玩家同时按下“w”和“a”时,我们可以将化身转向左前方,也就是摄像头的方向加上315度。
请注意,我们需要在检查单个按键之前检查这些双键组合。比如说,我们应该检查“w”和“a”是否同时被按下,只有在排除这个情况之后,我们才可以检查是否只有“w”被按下。如果我们先检查“w”是否被按下,那么我们会将化身转向正前方,那就没法正确处理“w+a”的组合了。

这是我们同时按下 2 个键时的结果:
第 17 步 - 设置玩家化身的速度
现在我们可以控制化身的方向。如果 4 个键中的任何一个被按下,我们就应该让化身移动。如果他们都没有被按下,我们应该让化身停止。
请注意,“前进速度”将使化身朝其当前面向的方向移动。

现在化身可以在我们按键时四处移动了:
第 18 步 - 添加动画
当化身在移动时,我们还应该将其动画设置为“跑”。当没有任何键被按下时,我们应该切换回“待命”动画。

现在我们化身可以作出跑的动作了:
第 18 步 - 让化身跳起来
当 SPACE 键被按下时,化身需要跳起来。为此,我们要设置化身的“上升速度”。

你应该还记得,在第 11 步中,我们已经设置了化身的“重力”。重力和上升速度是这样协同工作的:1。当我们按下 SPACE 时,上升速度被设置为300,这使化身开始上升。
2。随着时间的推移,重力会逐渐降低上升速度,让上升速度越来越小。这时我们会看到化身仍然在上升,但它在逐渐变慢。
3。当化身的上升速度变为0时,它达到了这次跳跃的最高点,并开始下降。
4。重力会继续让已经是负数的上升速度继续变小,这让化身的下降越来越快。
5。如果化身落到任何障碍物上,或者它的Z位置变为0,它会停止下降,它的上升速度也会被重置为0。
这是化身跳跃的样子:
第 19 步 - 跳跃动画
当化身在半空中时,我们需要将其动画更改为“跳在空中”。我们可以把动画积木加入到“在空中”积木的定义中:

现在跳跃动画可以显示出来了。但是,您会注意到一个小问题:化身在跳跃时身体会稍微向右偏移一些。
这很可能是由于化身的动画数据有错误。为了解决这个问题,我们可以在 x 方向上添加一个 -7 的偏移量,这将使化身向左平移 7 个单位:
这是更正后的跳跃动画:
第 19 步 - 在空中改变方向
当化身在半空中时,我们是否应该允许玩家改变它的方向?如果我们想让游戏更贴近现实,那么我们就不应该允许这个操作,因为没有人可以在跳跃的中途改变身体的移动方向。然而,如果我们添加这个操作,它将使游戏玩起来更有趣,因为玩家将对化身会有更好的控制。
在这个项目中,让我们允许这个操作。我们可以简单的复用“设置方向”积木:

现在化身跳起来后,我们还可以用w/s/a/d四个键改变它的飞行方向了:

第 20 步 - 允许在空中开始移动
现在我们需要回答一个类似的问题:如果化身垂直向上跳跃(移动速度为0),我们是否应该允许化身在半空中开始向前移动?为了让游戏更有趣,我们还是会允许玩家这样操作。我们可以从“已着陆”积木中复制这些积木:

请注意,我们不需要再更改动画,因为化身在空中时会保持“跳在空中”的动画。现在我们可以按 SPACE 让化身直接向上跳,然后按 w/s/a/d 键中的任一个让化身移动:
第 21 步 - “玩家速度”变量
目前,化身始终以每秒 300 个单位的速度移动。为了让游戏更有趣,我们可以添加这样一个功能:如果玩家一直按下“w”键,那么化身就会越跑越快。这样化身在一直往前跑的时候会让人感觉它获得了一些“冲力”。
为了让跑步速度可以变化,我们需要用一个新的变量“玩家速度”来代表它。这个变量最初应设置为 300,这将是化身的默认速度。我们最好将所有变量初始化代码放在最开始,这样以后会很容易找到这些积木。

接下来,我们在设置化身的前进速度和上升速度时应该使用“玩家速度”变量。如果速度数值越大,那么化身就会跑得更快、跳得更高。我们需要在“已着陆”和“在空中”中都使用这个变量。

第 22 步 - 加速化身
现在让我们通过更改“玩家速度”变量来加速化身。在“已着陆”积木的定义中,我们可以简单地检测“w”键是否被按下。
- 如果它是被按下,我们将“玩家速度”变量增加 5,除非它已经达到 900 或更高。
- 如果它没有被按下,我们将“玩家速度”重置为 300。

现在我们可以清楚地观察到化身的加速。请注意,如果我们按下“w + a”或“w + d”,“w”键仍然是被按下的,因此化身也同样会加速。
第 23 步 - 动画速度
当化身跑得更快时,它的跑步动画仍然保持相同的速度。我们其实可以让跑步的动画播放得更快,这样玩家更容易观察到化身的加速。
请创建一个名为“动画速度”的新变量,并将其用作“跑”动画的速度比例。我们可以使用“玩家速度”来计算动画的速度比例。例如,当玩家速度为 300 时,动画应以 100 速度比例播放。当玩家速度为 900 时,动画应以 300 的速度比例播放。因此,动画速度等于 100 乘以 玩家速度 与 300 的比率。

你现在可以观察到当化身跑得更快时,动画也会加快:
第 24 步 - 为阴影添加光源
下面我们让化身在跳板上投下阴影。这不仅会让游戏看起来更逼真,还会给玩家一些提示,让玩家知道化身在空中跳跃时会降落在哪里。
要使用阴影,我们需要做三件事:添加光源,使化身投射阴影,并使跳板接收阴影。
我们应该在程序一开始就添加光源,也就是在添加任何物体之前。由于“草地”场景已经包含了一些相当明亮的光源,我们需要先将它们删除掉。
要投射阴影,我们应该添加一个单向光源来模拟阳光。我们可以称它为“光源1”。这个光的方向是 x = -0.1, y = 0, z = -1:它会从上到下照射,但稍微向左偏移(负 x 方向),这样即使化身静止不动,我们也能看到一些阴影。

添加这 2 个积木后,化身变得很暗:
为了照亮它,让我们再添加一个环境光源。它的强度应该是比较低的,比如50,否则会使化身的影子很难看清。
现在化身看起来就清晰多了:
第 25 步 - 投射和接收阴影
要使化身投射阴影,我们应该在添加化身后立即改变它:

为了使跳板接收并显示阴影,我们需要在添加每个跳板后立即更改它。这必须在 平台 角色中的 两处 完成:
现在你应该看到这样一个漂亮的阴影了:
第 26 步 - 添加目标区域
现在我们已经准备好化身和平台,下一步是处理结束游戏的部分。首先,我们需要在平台的末端添加一个目标区域。
在“目标”角色中,当我们收到“添加目标”这个消息时,我们可以在最后一个跳板后面添加一个带有彩虹纹理的圆柱形平台。它的名字应该设置为“目标”,而且它需要接收和显示阴影:

这个目标区域会像这个样子:
第 27 步 - 主循环
在我们添加更多积木之前,是时候稍微清理一下我们现有的程序了,因为玩家角色中的主要积木堆已经变得太长了。
让我们定义一个名为“主循环”的新积木,并将现在的重复循环移到那里:

第 28 步 - 检测玩家胜利
要赢得比赛,化身必须站在目标平台上。在主循环中,每当化身落在某个障碍物上时,我们应该查看那个障碍物是否就是目标。
如果那个障碍物的名字是“目标”,那么我们就知道玩家已经完成了挑战。我们应该广播“胜利”的消息,然后使用“终止”积木退出这个重复循环。

注意,这些新的积木都是加在化身站在障碍物的情况下的。此外,在“终止”积木运行之后,重复循环将停止,因此玩家将无法再使用键盘来控制化身了。
第 29 步 - 庆祝动画
玩家完成挑战后,我们应该展示一些庆祝动画。我们需要把化身的速度设置为 0,让它停下来,然后开始“胜利”的动画。我们还应该将化身转向摄像头,以便我们可以看到它的正面。最后,我们应该把摄像头拉近化身,给它一个特写镜头。

下面就是庆祝的样子:
第 30 步 - 开始按钮
由于这个游戏是看谁能在最短的时间内跑到目标,我们需要用一个计时器来统计玩家用了多少秒。
我们需要在游戏开始时显示一个“开始”按钮,这样玩家就可以在他或她准备好时启动计时器。
在“控制”角色中,我们应该使用按钮控件来添加这个“开始”按钮。请注意,你需要先运行“添加按钮”积木以将其添加到舞台,然后当你再添加它下面 2 个积木时,这些积木的下拉列表中就能看到这个按钮的选项了。

该按钮将如下所示:

第 31 步 - 3 个游戏阶段
在点击“开始”按钮之前,玩家应该无法控制化身。在玩家点击“开始”按钮后,他才会获得化身的控制权,而我们也应该在那个时候开始计时。
为了确保我们正确地控制游戏的不同阶段,我们可以创建一个新变量“游戏阶段”。它将首先被设置为“等待开始”。当玩家单击“开始”按钮后,我们将游戏阶段更改为“已开始”。稍后,当玩家到达目标区域时,我们会受到“胜利”的消息,而这个时候我们可以将游戏阶段更改为“已结束”。

第 32 步 - 在游戏开始前限制玩家的控制
在游戏开始之前,玩家应该无法用键盘控制化身,因为我们还没有启动计时器。在“玩家”角色中,我们可以使用“游戏阶段”变量来确保这一点。我们将在游戏阶段改变为“已开始”后才进入主要的控制循环。

第 33 步 - 计时器显示
单击“开始”按钮时,我们应该删除该按钮,并在底部添加一个标签,用来显示计时器当前的时间。

当我们点击“开始”按钮时,它看起来像这样:
第 34 步 - 显示当前游戏时间
添加时间标签后,我们可以将计时器归零,并开始显示当前的游戏时间。我们可以每隔 0.1 秒就更新一次时间显示。我们需要重复的更新时间,直到游戏阶段变为“已结束”。

让我们来测试一下游戏时间的显示。你可以看到计时器在单击“开始”按钮后才开始计时,并在化身落在目标跳板上时停止计时。
第 35 步 - 记录游戏时间
在玩家到达目标点后,我们需要将游戏时间作为他/她的“分数”记录下来。这个分数将用来给这个玩家在排行榜上的进行排名。为此,我们可以使用“游戏”扩展类别中的“记录玩家得分”积木。
之后,我们应该添加另一个按钮,让玩家可以查看排行榜。

这是新按钮的样子:
第 36 步 - 显示排行榜
当玩家单击新添加的按钮时,我们会显示当前的排行榜。我们需要显示使用最少时间到达目标区域的玩家。由于每个玩家的“分数”就是完成游戏花费了多少秒的时间,我们应该显示“最低”分数的玩家。
注意,如果一个玩家多次运行游戏,所有的游戏时间都会被记录下来,但排行榜只会显示每个玩家的最佳记录。

排行榜将如下所示,显示排名、玩家姓名、该玩家的最佳游戏时间以及创建该记录的日期。
玩家可以通过单击右上角的“x”关闭此排行榜。
第 37 步 - 提高高度
现在我们的游戏已经完成了。在最后,让我们将所有的跳板和化身都移动到更高的 z 位置, 例如 5000。我们现在也可以隐藏 3D 轴了。
玩家角色:

平台角色:
目标角色:
这是游戏最终版本的演示:
创意
你可以通过多种方式扩展这个游戏。以下是一些供你参考的方法:
-
平台形状、大小和位置:你可以添加不同形状的平台,例如圆柱体和球体。它们可以有不同的大小,并且不必居中对齐。
-
旋转平台:你可以旋转平台,以便让化身跑步上坡或下坡。
-
模型:除了使用简单形状制作平台,你还可以使用有趣的模型,例如沙发床或汉堡包。
-
奖励:你可以在平台上添加额外的物体,当化身喷到它们时,它们会为玩家提供额外的帮助。例如,这个奖励物品可以是一瓶能量饮料,它可以使化身的速度在后面10秒内加倍。
-
A TCode Admin pinned this topic on
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login