使用 Smart Shape 构建 OrbitRun | 第 5 部分:找到流程
Logo

试着一路按住上键飞过山坡。飞船在你想让它爬升时会失去速度。本部分将让你更容易感受到释放时机的好坏,以及释放太晚的差别。然后,你会为高空飞行留出更多屏幕空间,并让游戏进程中的节奏逐渐加快。

从第 4 部分继续,或从检查点包中打开 OrbitRun-15-recovery.tap。你将在这里更改一些之前设置过的选项。每次更改后都玩一玩,感受哪些设置有帮助。

移动和镜头部分的灵感来自 Andreas Illiger 的 Tiny Wings 浏览器演示以及游戏玩法视频。OrbitRun 使用原创美术和音频。

完成的重建版本中,飞船先沿坡下滑收集物品,随后高空滑翔并触发镜头缩放

录制自完成后的检查点,其中包含第 6 部分添加的电池。留意飞船上升时逐渐缩小,而可见的地形范围随之扩大。

在图示中,REUSE 表示使用你之前添加的行为。如需回顾连接手势,请参阅第 1 部分中的行为连接快速指南。轻点图片即可全尺寸查看。

16. 让下坡动力更强,上坡重力更轻

合适的释放点是谷底,也就是坡面开始向上转折的位置。一直按到坡顶,会让飞船在爬坡时一直与更强的重力对抗。

  1. 打开 Skimmer 的行为。选择 Generate,并按下方设置修改地形。
  2. 将 Dive、Release 和 Launch 改为新数值。
  3. 更新两组辅助和限速行为:比较条件与其应用的速度必须相互匹配。
  • **Generate:**高度 14 m、间距 24 m、变化幅度 28%、摩擦力 0。坡面会将动量转化为爬升。
  • **Launch:**X 速度 28 m/s,Y 为 0,让起步更有力。
  • **Dive:**物体重力 X 0,Y −60,增强下坡时的牵引力。
  • **Release:**物体重力 X 0,Y −4,让飞船在空中停留更久。
  • **Slow Check 和 Assist:**如果 X 速度 < 18,则将 X 速度设为 18;开启 Maintain Y。这有助于从糟糕的着陆中恢复。
  • **Fast Check 和 Speed Limit:**如果 X 速度 > 58,则将 X 速度设为 58;开启 Maintain Y。良好的着陆可以让速度逐渐升高,直到达到此上限。

重建飞行手感课程时应用的新地形设置

  1. 将 Dive Cue 改为 DIVING / RELEASE AS THE HILL TURNS UP,将 Glide Cue 改为 GLIDING / PRESS INTO THE NEXT DOWNSLOPE。
  2. 将标题说明更新为 Hold on the downhill. Release on the uphill. Build speed, then soar.

先飞一趟,不要触碰任何按键。下一趟,在下坡时按住上键,并在谷底松开。观察你能爬升多高。现在试着在上坡时继续按住上键:你应该能感觉到飞船在与更强的向下牵引力抗衡。

飞船沿着地表滑行时,山坡会改变它的运动方向。爬升时减轻重力,可以让飞船将更多动量带向上方。

要微调手感,请每次只改一个数值。试试将 Release 设为 −6,缩短飞行时间;或者将 Dive 设为 −45,让按住上键的效果更温和。比较时将 Flight Tick 保持在 0.05 秒。这些重力设置适用于这艘飞船和这条赛道;其他游戏可能需要不同的设置。

17. 留出视野,方便玩家看清着陆点

你需要在抵达下一座山丘前看到它。将飞船移到屏幕偏左的位置,并在高空飞行时拉远镜头。

设置取景

调整此视图时,请保持打开 Screen to Object 和 Zoom Screen。

  1. 选择 Camera,即第 5 步中创建的 Screen to Object 行为。目标设为 Skimmer,持续时间设为 0。打开其 Anchor 设置,将相对 X 设为 450%、Y 设为 50%。这个偏移会让屏幕以飞船前方的某个点为中心,将飞船放在屏幕偏左的位置。
  2. 保留从 Camera 底部圆圈连接到 Follow 的现有连线,并在 Skimmer 上使用 Screen Follow,同时启用 X 和 Y。Screen Follow 会保留 Screen to Object 设置的取景位置。

打开了 Anchor 弹出窗口的 Screen to Object:X 为 450%,Y 为 50%

  1. 将初始的 Zoom Screen 行为(别名 Zoom)设为 75%,持续时间设为 0。让 HUD 保持在 Scene UI 上。

根据高度计算缩放目标

按照下方图示,添加一个新的注释分组 17 Frame the landing and ease the zoom。

  • **Camera Height (Get Position):**Skimmer,关闭 Screen Coordinates
  • **Camera Denominator (Add Values):**A = Camera Height 的 Y Position;B = 2
  • **Camera Ratio (Divide Values):**A = 1800;B = Camera Denominator 的结果
  • **Camera Near (If):**Camera Ratio 的结果 > 75
  • **Camera Near Zoom (Zoom Screen):**Zoom 75%,持续时间 0.45 s
  • **Camera Far (If):**Camera Ratio 的结果 < 22
  • **Camera Far Zoom (Zoom Screen):**Zoom 22%,持续时间 0.45 s
  • **Camera Air Zoom (Zoom Screen):**Zoom 设为 Camera Ratio 的结果,持续时间 0.45 s

按照下方指南操作,并让 Zoom Screen 的输出端保持未连接。Hud Tick 会启动每次新的镜头更新。

每次 HUD 更新时,读取飞船的高度并计算缩放目标。

动态连线指南:计算缩放目标

  1. 重用 Hud Tick。
  2. 添加一个名为 Camera Height 的 Get Position。将 Hud Tick 上一个空闲的底部白色圆圈连接到 Camera Height。
  3. 添加一个名为 Camera Denominator 的 Add Values。将 Camera Height 上一个空闲的底部白色圆圈连接到 Camera Denominator。
  4. 添加一个名为 Camera Ratio 的 Divide Values。将 Camera Denominator 上一个空闲的底部白色圆圈连接到 Camera Ratio。
  5. 添加一个名为 Camera Near 的 If。将 Camera Ratio 上一个空闲的底部白色圆圈连接到 Camera Near。

如果目标值超过 75%,就使用 75%。否则,检查另一个限值。

动态连线指南:先检查较近的限值

  1. 重用 Camera Near。
  2. 添加一个名为 Camera Near Zoom 的 Zoom Screen。将 Camera Near 底部的(true)圆圈连接到 Camera Near Zoom。
  3. 添加一个名为 Camera Far 的 If。将 Camera Near 右侧的(false)圆圈连接到 Camera Far。

如果目标值低于 22%,就使用 22%。否则,使用计算出的值。

动态连线指南:然后检查较远的限值

  1. 重用 Camera Far。
  2. 添加一个名为 Camera Far Zoom 的 Zoom Screen。将 Camera Far 底部的(true)圆圈连接到 Camera Far Zoom。
  3. 添加一个名为 Camera Air Zoom 的 Zoom Screen。将 Camera Far 右侧的(false)圆圈连接到 Camera Air Zoom。

让高度控制缩放

选择接收行为,将源输出拖入 Zoom (%),选择最终值,并检查生成的引用

放下后,Zoom (%) 中会出现 Camera Ratio · final value。将持续时间设为 0.45 秒。

Camera Air Zoom 接收 Camera Ratio 的结果,并在 0.45 秒内平滑过渡

其关系式为 target zoom = clamp(1800 / (world Y + 2), 22, 75)。请用列表中的行为搭建这个逻辑;不要将该表达式粘贴到数字输入框中。

  • **22 m:**超过上限后为 75%
  • **40 m:**约为 43%
  • **60 m:**约为 29%
  • **90 m:**达到下限后为 22%

观察飞船靠近山丘时的画面,再观察它高空滑翔时的画面。飞船上升时,赛道在屏幕中所占的区域应逐渐缩小。分数、能量和按钮的大小应保持不变。如果 HUD 缩小了,说明它位于世界图层上,而不是 Scene UI 上。

Hud Tick 每 0.2 秒为镜头提供一个新目标。每次 0.45 秒的过渡都会平滑地朝目标缩放,因此镜头会随着爬升平稳变化。缩放上下限可确保飞船清晰可见。

这个公式是针对当前赛道的高度和位置设置的。如果将赛道下移到接近或低于 Y −2 的位置,请调整偏移量,并避免除以零。

18. 随着游戏进行逐步加快节奏

按照第 1 部分演示的 Object Attributes 流程,添加 cruiseSpeed。使用 Get Attribute 读取它。

根据经过的时间调整速度。第 6 部分会添加能延长飞行时间的电池。电池应当让玩家在当前难度下多玩一会儿。

  1. 在 Skimmer 上添加一个名为 cruiseSpeed 的对象属性,初始值为 18。
  2. 按下方所示搭建两个分组:先计算速度,再将其应用到速度检查中。
  • **Pace Progress (Multiply Values):**A = Seconds 的结果;B = 0.12
  • **Pace Base (Add Values):**A = Pace Progress 的结果;B = 18
  • **Pace Clamp (If):**Pace Base 的结果 > 36
  • **Pace Max (Set Attribute):**Skimmer,cruiseSpeed = 36
  • **Pace Current (Set Attribute):**Skimmer,cruiseSpeed = Pace Base 的结果
  • **Pace Read (Get Attribute):**读取 Skimmer 的 cruiseSpeed
  • **Pace Cap (Add Values):**A = Pace Read 的 Attribute Value;B = 40
  1. 第一个指南会为 Pace Progress 设置两个触发器:Seconds 会在游戏过程中更新它;Generate 会在游戏开始时初始化它。
  2. 移除 Velocity 直接连接到 Slow Check 和 Fast Check 的执行连线。第二个指南会让两个检查都经由 Pace Read 运行。保留现有的旋转和反馈连线。
  3. 将 Slow Check 的第二个值和 Assist 的 X 速度设为 Pace Read 的 Attribute Value 输出。
  4. 将 Fast Check 的第二个值和 Speed Limit 的 X 速度设为 Pace Cap 的结果输出。两个 Set Velocity 行为都保持开启 Maintain Y。

在游戏开始时以及此后每经过一秒,计算一次最低速度。

动态连线指南:提高巡航速度

  1. 重用 Seconds。
  2. 重用 Generate。
  3. 添加一个名为 Pace Progress 的 Multiply Values。将 Seconds 上一个空闲的底部白色圆圈连接到 Pace Progress。再将 Generate 上一个空闲的底部白色圆圈连接到 Pace Progress。
  4. 添加一个名为 Pace Base 的 Add Values。将 Pace Progress 上一个空闲的底部白色圆圈连接到 Pace Base。
  5. 添加一个名为 Pace Clamp 的 If。将 Pace Base 上一个空闲的底部白色圆圈连接到 Pace Clamp。
  6. 添加一个名为 Pace Max 的 Set Attribute。将 Pace Clamp 底部的(true)圆圈连接到 Pace Max。
  7. 添加一个名为 Pace Current 的 Set Attribute。将 Pace Clamp 右侧的(false)圆圈连接到 Pace Current。

在检查飞船速度之前,先读取新的最低速度。

动态连线指南:应用不断变化的节奏

  1. 重用 Velocity。
  2. 添加一个名为 Pace Read 的 Get Attribute。将 Velocity 上一个空闲的底部白色圆圈连接到 Pace Read。
  3. 重用 Slow Check。将 Pace Read 上一个空闲的底部白色圆圈连接到 Slow Check。
  4. 添加一个名为 Pace Cap 的 Add Values。将 Pace Read 上一个空闲的底部白色圆圈连接到 Pace Cap。
  5. 重用 Assist。保留从 Slow Check 到 Assist 现有的 true(底部)连线。
  6. 重用 Fast Check。将 Pace Cap 上一个空闲的底部白色圆圈连接到 Fast Check。
  7. 重用 Speed Limit。保留从 Fast Check 到 Speed Limit 现有的 true(底部)连线。

将新的节奏值传入辅助行为

选择接收行为,将源输出拖入 X velocity,选择 attributeValue,并检查生成的引用

放下后,X velocity 中会出现 Pace Read · attributeValue。关闭 Maintain X,开启 Maintain Y。

起步时,你的最低速度为 18 m/s;30 秒后为 21.6,60 秒后为 25.2,90 秒后为 28.8。最低速度最高会升至 36 m/s。水平速度上限始终比最低速度高 40 m/s,因此最高可达到 76 m/s。顺利下坡时,飞船速度可以超过最低速度。

玩得久一些,感受节奏的变化。后面的山丘会让你有更少的时间做出反应,但良好的着陆仍能让飞船速度超过最低值。

最低速度有助于飞船从糟糕的着陆中恢复。如果游戏难度提升得太快,可以降低速度增长率。保留速度上限,这样长时间游戏时就有一个可测试、可调整的节奏范围。

下一步:第 6 部分:电池拾取物。检查点 18-rising-pace 包含本部分的全部内容。