This document is about: QUANTUM 3
SWITCH TO

Replacement Bots

簡介

在以下兩種情況下,讓 AI 獲取玩家角色的控制權通常是很有用的:

  1. 替換在正在進行的比賽中斷開連接的玩家。這有助於創造更公平的比賽,因為機器人可以在玩家嘗試重新連接遊戲時提供幫助,甚至可以彌補憤怒退出的玩家造成的影響。
  2. 當尚未達到開始遊戲會話所需的最低玩家數量時,用虛假玩家填滿房間。這在遊戲發布初期玩家數量仍然較少時尤為重要。

設置

在 Quantum 中,此類功能的 AI 邏輯由每個客戶端機器在本地執行;這意味著不存在「模擬機器人輸入的主客戶端」這一概念。

儘管運行 AI 來控制某些遊戲實體通常很簡單,但具體實現取決於遊戲本身。當然,AI 實現本身的複雜程度可以從非常簡單到極其複雜不等。

開始實現此功能最簡單的方法是標記一個實體在任何時候是否由 AI 控制。這可以通過多種方式實現:

  • 添加一個「標誌組件」,例如component AI {},在需要時向實體添加 / 移除該組件。然後,系統可以迭代所有具有AI組件的實體來執行控制邏輯;
  • 在組件中使用布爾值來開啟 / 關閉 AI 控制,例如component MyCharacter { bool ControlledByAI; }
  • 添加更多帶有大量額外數據的 AI 特定組件,例如 Bot SDK 的代理組件(HFSM、BT 等),或自定義組件;

至於何時執行設置,這取決於前面提到的特定使用場景;下一節將詳細探討這些場景。

在遊戲比賽中替換真實玩家

這可以通過啟用PlayerConnectedSystem,然後響應ISignalOnPlayerConnectedISignalOnPlayerDisconnected信號來實現。有關該系統及其附帶信號的說明,請參閱玩家文檔
一旦玩家斷開連接:找到該玩家控制的一個或多個實體,並按照上述方法設置 AI。
當玩家再次連接時,檢查是否存在曾由該玩家控制的實體,並移除 AI 設置,以便玩家從 AI 那裡收回控制權。

值得一提的是,上述系統使用PlayerInputFlags來工作,如果需要,它也可以獨立於PlayerConnectedSystem使用。有關玩家輸入標誌的更多信息,請點擊此處

用機器人填滿房間

在這種情況下,不存在實際的玩家。換句話說,創建的實體從未打算由真實的人控制。

由於不涉及玩家,因此也不需要連接邏輯。自定義遊戲邏輯可以用實體填滿房間,如下面的示例算法 / 代碼片段所示:

  • 在 Quantum 系統中,遊戲開始後等待一段時間,以便玩家有時間連接併發送他們的玩家數據;
  • 當玩家到達時,使用OnPlayerDataSet回調,在遊戲狀態中(例如在 frame.Global 的變量中)保存成功連接並加入遊戲的玩家數量;
  • 間隔結束後,從框架 API 的預期玩家數中減去這個數量,如下所示:
    int fillAmount = frame.PlayerCount - frame.Global->ConnectedPlayersCount;
  • 使用計算結果執行for循環來創建機器人實體:

C#

for(int i = 0; i < fillAmount; i++)
{
    // Create a new Entity here
    // Setup it as a Bot as explained earlier on this document
}

上面的代碼片段非常簡單,應根據遊戲和遊戲設計的要求進行調整;例如,向機器人實體分配特殊信息可能很有用,如虛假的玩家信息、團隊數據等。

選擇要創建的機器人

根據遊戲類型,基於一些已知數據創建新機器人可能很有用。例如,選擇一個尚未被選中的角色的機器人,或者選擇不同難度級別的機器人。

提示: RuntimeConfig資產可以包含一些實體原型的引用(即AssetRefEntityPrototype),因此您可以引用多種角色以供選擇。或者,可能存在一種類型的角色,它引用不同的 AI 資產來控制它(例如,基於難度級別的不同狀態機)。

玩家和機器人架構

角色由 Quantum 系統控制。這些系統通常知道如何讀取玩家輸入來改變角色的遊戲狀態,例如移動、旋轉和觸發攻擊。

現在,可以通過多種方式使用 AI 邏輯控制這些相同的角色。以下是一種通常運行良好的 代碼架構 示例:

  1. 玩家自然有一個輸入,可以用frame.GetPlayerInput(playerIndex)來查詢,它會返回一個指向Input類型結構的指針;
  2. 機器人也可以在自定義組件中擁有相同的結構 ——component Bot { Input Input }—— 並且 AI 邏輯本身可能只是用來填充其中的數據;
  3. 在任何角色系統運行之前 填充輸入數據。這樣,如果系統知道如何獲取輸入而不管是誰填充的,那麼系統中就不需要額外的特殊檢查來確定該實體是玩家還是機器人;
  4. 這意味著 AI 系統幾乎可能從不直接影響實體狀態,而是根據其決策邏輯生成虛假輸入。

使用此類架構的優點是通過提供解耦的系統,清晰地分離了:輸入 | 玩家和機器人 | 角色。

請注意:這只是一個建議。此架構並非強制性的,也可以通過許多其他方式實現相同的結果。

以下是雙搖桿射擊遊戲樣例中使用此策略的可視化展示:

Input Polling

注意: 雙搖桿射擊遊戲樣例是一個 高級 樣例,因此在分析它之前需要了解 Quantum 的基礎知識。

使用 Bot SDK 的 AI

如果您剛開始考慮項目的 AI,您可能需要了解 Quantum 的 Bot SDK。Bot SDK 是一組編輯器工具和 Quantum 代碼,支持創建 AI 代理,例如狀態機、行為樹和其他常用解決方案。

有關 Bot SDK 的更多信息,請點擊此處

Back to top