使用 Smart Shape 建立 OrbitRun|第 3 部分:世界變化與重玩
給玩家一個前進的目標。隨著遊戲持續進行,紫色丘陵會先轉為綠色,再變成紅色。90 秒後,顯示玩家的距離和重玩按鈕。儲存玩家的最佳成績,讓他們下次有目標可以超越。
從 第 2 部分繼續,或從檢查點套件開啟 OrbitRun-09-countdown.tap。繼續在 Skimmer 的行為編輯器中作業。
在圖示中,REUSE 表示使用你先前新增的行為。如需手勢提示,請參閱第 1 部分中的行為連接方式。點按圖片即可檢視完整尺寸。
10. 穿越三個世界
遊戲會從 Luna Shores 開始,30 秒後切換至 Aurora Reach,60 秒後再切換至 Ember Drift。丘陵會保留原有的物理特性與形狀,只更換美術圖。
建立 Aurora 的轉場
使用 Set Graphic,並指定產生地形的物件 ID。Smart Shape 物件參考說明了各個美術圖插槽的用途。
先更換頂部美術圖。若成功,再更換填充圖並更新標籤。
- 重用 Generate。
- 新增名為 Aurora Timer 的 Timer。將 Generate 上一個空白的底部白色圓圈連接至 Aurora Timer。
- 新增名為 Aurora Top 的 Set Graphic。將 Aurora Timer 上一個空白的底部白色圓圈連接至 Aurora Top。
- 新增名為 Aurora Top Valid 的 If。將 Aurora Top 上一個空白的底部白色圓圈連接至 Aurora Top Valid。
- 新增名為 Aurora Fill 的 Set Graphic。將 Aurora Top Valid 底部(true)圓圈連接至 Aurora Fill。
- 新增名為 Aurora Fill Valid 的 If。將 Aurora Fill 上一個空白的底部白色圓圈連接至 Aurora Fill Valid。
- 新增名為 Aurora Announce 的 Change Label。將 Aurora Fill Valid 底部(true)圓圈連接至 Aurora Announce。
使用以下設定:
- Aurora Timer: 30 秒;Repeat Forever 關閉;Repeat Count 設為 1;Start Immediately 關閉。
- Aurora Top: 目標為 Generate 的 terrainObjectID 輸出;美術圖設為
aurora-top;Smart Shape 插槽設為 Top。 - Aurora Top Valid: Aurora Top 的 smartShapeError 輸出 Equals 空白文字值。第二個值留空,不要加引號。
- Aurora Fill: 目標為 Generate 的 terrainObjectID 輸出;美術圖設為
aurora-fill;Smart Shape 插槽設為 Middle。 - Aurora Fill Valid: Aurora Fill 的 smartShapeError 輸出 Equals 空白文字。
- Aurora Announce: 目標為 Stage;文字設為
02 / AURORA REACH。
使用產生的地形 ID
放開後,Object A 會包含 Generate · terrainObjectID。Aurora Fill、Ember Top 和 Ember Fill 也重複此步驟。
檢查美術圖變更結果
放開後,First value (A) 會包含 Aurora Top · smartShapeError。設定為 Equals;第二個文字值留空。
注意選取美術圖的步驟。點按 New graphic,開啟 Graphics,然後選擇 aurora-top。其縮圖應會出現在屬性面板中。Smart Shape 插槽維持設定為 Top / Road / Perimeter;設定 Aurora Fill 時則選擇 Middle。
建立 Ember 的轉場
在 Aurora 旁建立 Ember 行為,並使用下方指南中的名稱。
將計時器改為 60 秒,美術圖改為 ember-top 和 ember-fill,最後的標籤改為 03 / EMBER DRIFT。兩個物件輸入都維持連接至 Generate 的 terrainObjectID 輸出。確認每個 If 都讀取它所屬 Ember 美術圖變更行為的輸出;Ember 的檢查不可讀取 Aurora 行為。
Ember 的連接順序相同,但要檢查它自己的結果。
- 重用 Generate。
- 新增名為 Ember Timer 的 Timer。將 Generate 上一個空白的底部白色圓圈連接至 Ember Timer。
- 新增名為 Ember Top 的 Set Graphic。將 Ember Timer 上一個空白的底部白色圓圈連接至 Ember Top。
- 新增名為 Ember Top Valid 的 If。將 Ember Top 上一個空白的底部白色圓圈連接至 Ember Top Valid。
- 新增名為 Ember Fill 的 Set Graphic。將 Ember Top Valid 底部(true)圓圈連接至 Ember Fill。
- 新增名為 Ember Fill Valid 的 If。將 Ember Fill 上一個空白的底部白色圓圈連接至 Ember Fill Valid。
- 新增名為 Ember Announce 的 Change Label。將 Ember Fill Valid 底部(true)圓圈連接至 Ember Announce。
啟動遊戲並觀察第一分鐘。剩餘時間約 60 秒時,賽道會變成綠色,Stage 顯示 AURORA REACH。剩餘時間約 30 秒時,賽道會變成暖紅色,並顯示 EMBER DRIFT。飛船應能在兩次變化期間持續移動。
你已更換整條賽道,因為 terrainObjectID 會識別完整的 Smart Shape。現有區段會套用新美術圖,新增區段也會使用它。在其他專案中,若要逐一更換每個新區段的美術圖,請使用 New Section 和 sectionObjectID。
保留兩個成功檢查。這樣只有在頂部和中間美術圖都更換成功後,Stage 標籤才會變更。
11. 結束遊戲並提供再次挑戰的機會
進入結束狀態
使用以下三個建置指南。Run Limit 是 90 秒的計時器:Repeat Forever 關閉、Repeat Count 設為 1、Start Immediately 關閉。Finished 會將 Skimmer 的 runState 設為 finished。
依照下列方式設定其子行為:
- Stop Flight (Set Behavior State): 停用 Flight Tick
- Stop Hud (Set Behavior State): 停用 Hud Tick
- Stop Clock (Set Behavior State): 停用 Seconds Tick
- Freeze (Set Velocity): Skimmer;X 0、Y 0;Maintain X 關閉、Maintain Y 關閉
- Zero Gravity (Set Gravity): Skimmer;Object;X 0、Y 0
- Show Results (Set Visibility): 顯示 Results Card、Results Title、Results Score、Results Tip、Replay、Replay Label
- Hide Cue (Set Visibility): 隱藏 Cue、Clock、Flow Label
- Result Score (Change Label): 目標為 Results Score;文字取自 Distance Text 的 Combined Text 輸出
如圖所示,每個動作都從 Finished 直接分支連出。
90 秒後,設定結束狀態並停止更新計時器。
- 重用 Generate。
- 新增名為 Run Limit 的 Timer。將 Generate 上一個空白的底部白色圓圈連接至 Run Limit。
- 新增名為 Finished 的 Set Attribute。將 Run Limit 上一個空白的底部白色圓圈連接至 Finished。
- 新增名為 Stop Flight 的 Set Behavior State。將 Finished 上一個空白的底部白色圓圈連接至 Stop Flight。
- 新增名為 Stop Hud 的 Set Behavior State。將 Finished 上一個空白的底部白色圓圈連接至 Stop Hud。
- 新增名為 Stop Clock 的 Set Behavior State。將 Finished 上一個空白的底部白色圓圈連接至 Stop Clock。
接著停止飛船移動。將速度歸零與將重力歸零需要分別連接。
- 重用 Finished。
- 新增名為 Freeze 的 Set Velocity。將 Finished 上一個空白的底部白色圓圈連接至 Freeze。
- 新增名為 Zero Gravity 的 Set Gravity。將 Finished 上一個空白的底部白色圓圈連接至 Zero Gravity。
從 Finished 再接出更多連線,以顯示結果。
- 重用 Finished。
- 新增名為 Show Results 的 Set Visibility。將 Finished 上一個空白的底部白色圓圈連接至 Show Results。
- 新增名為 Hide Cue 的 Set Visibility。將 Finished 上一個空白的底部白色圓圈連接至 Hide Cue。
- 新增名為 Result Score 的 Change Label。將 Finished 上一個空白的底部白色圓圈連接至 Result Score。
連接重玩功能
屬性: Replay Touch 的目標為 Replay,Touch Anywhere 關閉,Absorbs Touch 開啟。Replay State 讀取 Skimmer 的 runState。Replay Check 將該 Attribute Value 與 finished 比較。Restart 使用 Restart Scene,並開啟 Refresh。
重新啟動場景前,先檢查是否處於結束狀態。
- 新增名為 Replay Touch 的 Started Touching。
- 新增名為 Replay State 的 Get Attribute。將 Replay Touch 上一個空白的底部白色圓圈連接至 Replay State。
- 新增名為 Replay Check 的 If。將 Replay State 上一個空白的底部白色圓圈連接至 Replay Check。
- 新增名為 Restart 的 Restart Scene。將 Replay Check 底部(true)圓圈連接至 Restart。
讓遊戲完整結束一次。飛船應會停止,結果畫面應顯示最後一次更新的距離,而觸碰遊玩區域不應再讓飛船恢復下潛。點按 FLY AGAIN:標題畫面會再次出現,時鐘歸零,下一次起飛會產生新的賽道。
先將 runState 設為 finished,再停止飛船,這樣觸碰檢查就不會再接受輸入。也要停用飛行計時器,否則下一次更新可能會再次移動飛船。Freeze 中的兩個 Maintain 開關都必須關閉,才能同時停止下墜和向前移動。
12. 記住個人最佳成績
重玩後仍應保留最佳成績。將成績儲存在存檔中,並使用一個可在場景開啟時讀取的鍵。
載入先前的最佳成績
如需了解鍵、預設值和已儲存的數值,請參閱 Load from File 和 Save to File。
- Load Best (Load from Save File): 位於頂層,不連接至 Generate。使用鍵
orbit-best-distance-v1,預設值為 0。 - Best Text (Combine Text): A =
PERSONAL BEST,B = Load Best 的 Loaded Value 輸出,Space 開啟。 - Best Label (Change Label): 目標為 Menu Best;Text = Best Text 的 Combined Text 輸出。
場景開啟時載入已儲存的距離,然後在標題畫面顯示。
- 新增名為 Load Best 的 Load from Save File。
- 新增名為 Best Text 的 Combine Text。將 Load Best 上一個空白的底部白色圓圈連接至 Best Text。
- 新增名為 Best Label 的 Change Label。將 Best Text 上一個空白的底部白色圓圈連接至 Best Label。
只儲存更好的成績
儲存設定: Check Record 將 Distance Round 的結果與 Load Best 的 Loaded Value 比較,運算子為 Greater Than。Save Best 使用 Set Key,Dynamic key 設為 orbit-best-distance-v1,值使用 Distance Round 的結果。Record Label 的目標為 Results Title,文字設為 NEW PERSONAL BEST。
遊戲結束時,只有在成績超越已載入的紀錄時才儲存。
- 重用 Finished。
- 新增名為 Check Record 的 If。將 Finished 上一個空白的底部白色圓圈連接至 Check Record。
- 新增名為 Save Best 的 Modify Save File。將 Check Record 底部(true)圓圈連接至 Save Best。
- 新增名為 Record Label 的 Change Label。將 Check Record 底部(true)圓圈連接至 Record Label。
完成一局遊戲。如果距離超越已載入的最佳成績,結果標題應會變更。重玩並確認 Menu Best 顯示已儲存的數字。若新成績較短,原有的最佳成績應維持不變。如果你已玩過使用相同存檔鍵的其他 OrbitRun 專案,可能已經有先前的成績。
在加上 m 標籤前,先比較 Distance Round 的數值。如此一來,儲存的值仍可用於計算。將此功能改編到另一款遊戲時,請為存檔鍵使用獨有的前綴,讓該遊戲能各自保留分數和偏好設定。
加入自己的挑戰
試試兩分鐘版本。將 Remaining 的起始值和 Run Limit 兩者都改為 120,並將 Clock 的初始文字改為 120 s。然後決定世界轉換應在何時發生。若只更新標籤,實際遊戲時間仍會是 90 秒。
接著閱讀第 4 部分:音效與最後修飾,或將你的專案與檢查點 12-personal-best 比較。

