重新綁定輸入方式
使用 Rebind Input,讓玩家在遊戲進行中變更控制項。你也可以讀取目前的選擇,或還原你設定的控制項。
遊戲玩法的連線會維持不變。例如,玩家可以變更 Jump 使用的控制器按鈕,而你現有的 Jump 行為仍會保留其移動設定。
請在 Interaction > Controls 中找到它。
屬性
這些設定會等待 Player 1 的 Jump 綁定換成其他輸入。
| 屬性 | 預設值 | 功能 |
|---|---|---|
| Player | 1 | 要變更或讀取其綁定的玩家。請與目標的玩家編號一致。 |
| Input Behavior | 未選取 | 選取 Map Control Inputs、Controller Event,或能識別單一特定輸入的 Keyboard Event 或 Mouse Event。Cancel 和 Reset All 不需要目標。 |
| Binding | 第一個對應列,或事件的單一輸入 | 依友善名稱選取對應列。具體事件只有一個綁定。不同的列可讓控制器、鍵盤和滑鼠的替代輸入彼此分開。 |
| Operation | Listen | 選擇要擷取、取消、讀取或重設綁定。 |
特定的 Keyboard Event 按鍵可以重新綁定。Any 按鍵和 On Sequence 無法識別單一綁定。Mouse Event 可以識別點擊、移動或單一捲動方向。Any 捲動無法識別要重新綁定的特定方向。
Map Control Inputs 使用正數玩家編號。若要重新綁定以 Player 0 設定的 Controller Event,這裡也要使用 Player 0。這個所有控制器皆適用的事件不會列入依玩家產生的 Controls 表格。
操作與事件時機
| 操作 | 執行結果 | 底部事件連線的執行時機 |
|---|---|---|
| Listen | 等待相容的輸入,並將其儲存為所選綁定。 | 擷取成功、遭到取消,或因目標不可用而無法開始時執行。提示更新時不會每次都執行。 |
| Cancel | 停止目前正在進行的聆聽操作。已儲存的綁定不會變更。不需要目標。 | 立即執行。聆聽中的行為也會以取消狀態完成。 |
| Reset | 移除所選綁定已儲存的覆寫設定,並還原為原先設定的控制項。 | 重設嘗試完成後立即執行。 |
| Reset All | 移除目前專案中此玩家所有已儲存的綁定覆寫設定。不需要目標。 | 立即執行。不指定目標的 Reset All 會回報成功。 |
| Get Binding | 讀取所選綁定目前已儲存或原先設定的控制項。 | 讀取後立即執行。 |
再次啟動 Listen 會取代目前的聆聽操作。請讓 UI 中一次只啟用一個重新綁定請求。
哪些控制項可以互相替換?
擷取範圍會限定在所選綁定的輸入家族與類型內。
| 所選綁定 | 相容的擷取輸入 |
|---|---|
| 控制器按鈕或扳機 | 其他控制器按鈕或扳機。 |
| 控制器移動 | 搖桿或方向鍵。 |
| 鍵盤按鍵 | 單一鍵盤按鍵。 |
| 鍵盤移動 | 四個不同的鍵盤按鍵,依序為 Up、Right、Down、Left。 |
| 滑鼠按鈕或捲動方向 | 滑鼠按鈕或捲動方向。 |
| 滑鼠移動 | 相對滑鼠移動。 |
設定鍵盤移動時,請按照 prompt 指示逐一輸入按鍵。若按下已分配給其他方向的按鍵,聆聽會停留在目前步驟。只有接受完整的四鍵組合後,才會儲存這四個按鍵。
不相容的輸入不會結束聆聽。若要讓同一個動作同時支援鍵盤和控制器,請在 Map Control Inputs 中設定不同的列。重新綁定會變更既有的列,不會替遊戲新增其他裝置的替代輸入。
輸出
| 輸出 | 內容 |
|---|---|
control | 已儲存或查詢到的控制項識別碼,例如 buttonA、keyboard:44 或 mouse:1。Listen 成功、Get Binding 或 Reset 時會讀取此值。若 Reset All 成功,則可能沒有可回傳的單一控制項。 |
label | control 的易讀標籤。控制器正面按鈕會依其位置顯示。鍵盤移動綁定會顯示實際選取的四個按鍵。 |
prompt | 目前的擷取指示。聆聽期間會隨狀態變更,例如要求輸入下一個移動按鍵。 |
progress | 已完成的擷取步驟數。起始值為 0;鍵盤移動會依序進至 1、2 和 3,最後以 4 完成。其他成功的擷取會以 1 完成。取消 Listen 時會回傳 0。 |
success | 成功擷取、讀取或重設綁定時為 true。Reset All 不需要目標也會回傳 true。false 表示擷取遭到取消,或所要求的綁定不可用。 |
cancelled | 聆聽遭到取消時為 true。若目標不可用,success 和 cancelled 都會回傳 false。 |
deviceID | 提供成功擷取輸入的裝置。控制器會回傳其工作階段 ID;鍵盤和滑鼠則分別回傳 keyboard 和 mouse。 |
聆聽期間讀取 prompt 和 progress,即可讓 UI 顯示下一個步驟。提示更新不會觸發底部事件連線。你可以從獨立的 UI 更新行為讀取這些輸出。
擷取輸出描述的是一次擷取嘗試。Get Binding、Reset 和 Reset All 不會開始新的擷取。獨立的 Cancel 操作會回報 success 和 cancelled;請勿將其其他輸出視為新的擷取結果。操作後請使用 Get Binding 顯示目前的控制項。
取消擷取
玩家可以按 Escape 或控制器的 Menu 按鈕取消。聆聽期間,這些控制項會保留作為取消用途。右側正面按鈕仍可供綁定。你的自訂 UI 也應提供 Cancel 操作。
聆聽開始時若已有控制項按住,請先放開,再重新按下。擷取到的輸入會暫時阻止傳入遊戲,直到輸入恢復中立狀態。
產生的 Controls overlay 在控制器擷取時提供 15 秒的備用逾時機制,以應對 Menu 按鈕無法使用或尚未確認的情況。Universal 也會對其控制器擷取服務套用此備用機制。自訂的原生 Rebind Input 流程應提供 Cancel,不要依賴逾時。鍵盤和滑鼠擷取不使用此控制器逾時機制。
在產生的 overlay 中,選擇裝置分頁,然後點選某個動作的 Change。焦點所在的提示會顯示目前綁定、要按下的下一個輸入,以及 Cancel。overlay 也會處理用來開啟擷取的滑鼠點擊,以及點擊其 Cancel 按鈕的操作。建議使用該 UI 重新綁定滑鼠輸入。本文的自訂連線範例會選取控制器綁定。
連線指南:變更 Jump 並更新其標籤
這是示範範例。請先在 Map Control Inputs 中設定一個控制器列,將其友善名稱設為 Jump,再將它連接至遊戲的跳躍輸入。
- 建立 Change 按鈕物件和 Jump Binding 標籤物件。
- 為 Change 按鈕新增 Started Touching。將其底部事件連線接到 Rebind Input。
- 將該 Rebind Input 設為 Listen、Player 1、你的 Map Control Inputs 行為,以及 Jump 控制器列。
- 將 Listen 連接到第二個 Rebind Input。將此行為設為 Get Binding,並使用相同的 Player、Input Behavior 和 Binding。
- 將 Get Binding 連接到 Set Label。選取 Jump Binding 作為 Object A。
- 將 Get Binding 執行個體的綠色
label輸出拖曳到 Set Label 的 Text 屬性。 - 建立 Cancel 按鈕物件。將它的 Started Touching 行為連接到另一個設為 Cancel 的 Rebind Input。此 Cancel 行為不需要目標。
請使用設為 Get Binding 的執行個體所輸出的 label。Listen 結束後,它會讀取已儲存的選擇。
Listen 會在擷取成功或遭到取消時結束。接著 Get Binding 會讀取目前的選擇,因此若玩家取消,標籤會顯示先前的控制項。你也可以在 UI 初次開啟時執行 Get Binding,以顯示初始選擇。
已儲存的選擇
覆寫設定會依目前的專案、玩家、行為和綁定儲存。變更某個控制器列不會影響其鍵盤和滑鼠替代輸入。Reset All 會影響該玩家在整個專案中已儲存的綁定,包括其他場景中原先設定的控制項。它不會重設其他玩家的選擇,也不會變更控制器指派。
你可以在專案中的控制項所屬場景載入前,先重新綁定這些控制項。若遊戲透過其他行為的輸出來決定控制項的玩家或輸入來源,必須等到該即時行為解析出這些值後,控制項才會可用。
已儲存的選擇由玩家執行階段儲存。它們不會識別特定的控制器硬體,也不保證能在不同裝置或玩家 app 之間轉移。使用 Assign Controller 為玩家選擇已連接的裝置。請透過平台本身的設定來連接或配對實體裝置。

