使用 Smart Shape 打造 OrbitRun|第 5 部分:找到流程
試著一路按住按鍵爬上山坡。飛船爬坡時會失去速度。本篇會讓你更容易感受到好時機釋放與太晚釋放之間的差別。接著,你會為高空飛行留出更多畫面空間,並讓遊戲進行時節奏逐漸加快。
從第 4 部分繼續,或從檢查點套件開啟 OrbitRun-15-recovery.tap。本篇會修改一些先前的設定。每次修改後都玩一玩,感受哪些設定有所幫助。
移動與鏡頭的課程設計靈感來自 Andreas Illiger 的 Tiny Wings 瀏覽器示範和遊戲影片。OrbitRun 保留自己的原創美術與音效。
錄製自完成的檢查點,包含第 6 部分新增的電池。觀察飛船升高時如何縮小,而畫面中可見的地形範圍如何擴大。
在圖示中,重複使用表示使用你已新增的行為。如需手勢提示,請參閱第 1 部分的行為連接。點按圖片即可放大檢視。
16. 讓下坡有重量感、上坡更輕盈
理想的釋放點是山谷,也就是坡面開始向上升起的地方。一路按住直到山頂,會在爬坡時受到更強的重力牽制。
- 開啟 Skimmer 的行為。選取 Generate,並依照下方設定修改地形。
- 將 Dive、Release 和 Launch 改為新數值。
- 更新輔助與上限這兩組行為的兩端:比較條件和套用的速度必須一致。
- **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。理想的著陸可以累積速度,最高到達此上限。
- 將 Dive Cue 改為
DIVING / RELEASE AS THE HILL TURNS UP,並將 Glide Cue 改為GLIDING / PRESS INTO THE NEXT DOWNSLOPE。 - 將標題說明更新為
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 開啟。
- 選取 Camera,也就是步驟 5 建立的 Screen to Object 行為。目標設為 Skimmer,持續時間設為 0。開啟 Anchor 設定,將相對 X 設為 450%、Y 設為 50%。這個偏移會將飛船前方的一點置於畫面中央,讓飛船位在畫面左側。
- 保留 Camera 底部圓圈連到 Follow 的既有連線,並在 Skimmer 上使用 Screen Follow,同時啟用 X 和 Y。Screen Follow 會保留 Screen to Object 建立的畫面構圖。
- 將初始的 Zoom Screen 行為(別名 Zoom)設為 75%,持續時間設為 0。讓 HUD 保持在 Scene UI 上。
根據高度計算縮放目標
新增一個註解群組 17 Frame the landing and ease the zoom,並依照下方圖示設定。
- **Camera Height (Get Position):**Skimmer,Screen Coordinates Off
- **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 更新時讀取飛船的高度,並計算縮放目標。
- 重複使用 Hud Tick。
- 新增名為 Camera Height 的 Get Position。將 Hud Tick 上空白的底部白色圓圈連到 Camera Height。
- 新增名為 Camera Denominator 的 Add Values。將 Camera Height 上空白的底部白色圓圈連到 Camera Denominator。
- 新增名為 Camera Ratio 的 Divide Values。將 Camera Denominator 上空白的底部白色圓圈連到 Camera Ratio。
- 新增名為 Camera Near 的 If。將 Camera Ratio 上空白的底部白色圓圈連到 Camera Near。
若目標超過 75%,就使用 75%。否則,檢查另一個上限。
- 重複使用 Camera Near。
- 新增名為 Camera Near Zoom 的 Zoom Screen。將 Camera Near 底部(true)圓圈連到 Camera Near Zoom。
- 新增名為 Camera Far 的 If。將 Camera Near 右側(false)圓圈連到 Camera Far。
若目標低於 22%,就使用 22%。否則,使用計算出的數值。
- 重複使用 Camera Far。
- 新增名為 Camera Far Zoom 的 Zoom Screen。將 Camera Far 底部(true)圓圈連到 Camera Far Zoom。
- 新增名為 Camera Air Zoom 的 Zoom Screen。將 Camera Far 右側(false)圓圈連到 Camera Air Zoom。
讓高度控制縮放
放開後,Zoom (%) 會包含 Camera Ratio · final value。將持續時間設為 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 部分會新增能延長飛行時間的電池。它們應該讓玩家有更多時間應付目前的難度。
- 在 Skimmer 上新增物件屬性
cruiseSpeed,初始值為 18。 - 建立下方顯示的兩個群組:先計算速度,再將速度套用至速度檢查。
- **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
- 第一個指南讓 Pace Progress 有兩個觸發來源:Seconds 會在遊戲進行時更新它;Generate 會在啟動時初始化它。
- 移除 Velocity 直接連到 Slow Check 和 Fast Check 的執行連線。第二個指南會讓兩個檢查都經過 Pace Read。保留既有的旋轉與回饋連線。
- 將 Slow Check 的第二個數值以及 Assist 的 X 速度設為 Pace Read 的 Attribute Value 輸出。
- 將 Fast Check 的第二個數值以及 Speed Limit 的 X 速度設為 Pace Cap 的結果輸出。兩個 Set Velocity 行為都保留 Maintain Y On。
在啟動時,以及之後每經過一秒,計算一次最低速度。
- 重複使用 Seconds。
- 重複使用 Generate。
- 新增名為 Pace Progress 的 Multiply Values。將 Seconds 上空白的底部白色圓圈連到 Pace Progress。再將 Generate 上空白的底部白色圓圈連到 Pace Progress。
- 新增名為 Pace Base 的 Add Values。將 Pace Progress 上空白的底部白色圓圈連到 Pace Base。
- 新增名為 Pace Clamp 的 If。將 Pace Base 上空白的底部白色圓圈連到 Pace Clamp。
- 新增名為 Pace Max 的 Set Attribute。將 Pace Clamp 底部(true)圓圈連到 Pace Max。
- 新增名為 Pace Current 的 Set Attribute。將 Pace Clamp 右側(false)圓圈連到 Pace Current。
在檢查飛船速度之前,先讀取新的最低速度。
- 重複使用 Velocity。
- 新增名為 Pace Read 的 Get Attribute。將 Velocity 上空白的底部白色圓圈連到 Pace Read。
- 重複使用 Slow Check。將 Pace Read 上空白的底部白色圓圈連到 Slow Check。
- 新增名為 Pace Cap 的 Add Values。將 Pace Read 上空白的底部白色圓圈連到 Pace Cap。
- 重複使用 Assist。保留從 Slow Check 到 Assist 既有的 true/底部連線。
- 重複使用 Fast Check。將 Pace Cap 上空白的底部白色圓圈連到 Fast Check。
- 重複使用 Speed Limit。保留從 Fast Check 到 Speed Limit 既有的 true/底部連線。
將新節奏值傳入輔助
放開後,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 包含本篇的所有內容。

