This document is about: FUSION 2
SWITCH TO

Architecture

這個章節說明了KCC與其他元件的關係及通信流。


碰撞器

  • 在運行階段建立KCC碰撞器為一個下層遊戲物件。
  • 碰撞器遊戲物件的圖層由KCCSettings.ColliderLayer控制,並且透過網路同步。

剛體

  • Rigidbody元件由KCC所需要,並且用於立即位置同步到物理引擎。
  • 必須啟用Is Kinematic旗標(在生成時強制)。

轉換

  • 使用轉換元件為只能寫入。
  • 在生成期間只讀取一次位置及旋轉。

以下圖表從高層次角度展示了KCC的工作方式:

kcc architecture
高層次KCC架構。

遊戲遊玩指令碼

  • 命令KCC的使用者指令碼,其代表「該做什麼」(以給定方向移動、看著位置、忽略一個特定的碰撞器、做一個跳躍、啟用蹲下等等)。
  • 資料層 讀取資訊(舉例而言Is GroundedReal Velocity等等)。
  • 調用 公共APIKCC.SetInputDirection()KCC.SetLookRotation()KCC.Jump())。
  • 可以與 互動指令碼 協調運作。
  • 舉例而言,Player類別轉譯輸入(滑鼠差量)到KCC動作(KCC.SetLookRotation())。

互動指令碼

  • 使用者指令碼(執行IKCCProcessor),其代表「如何移動」(在地面時投射輸入方向,在蹲下時速度減慢50%,計算所需速度)。
  • 核心迴圈 執行期間間接地插入邏輯。
  • 直接寫入到 資料層 或調用 公共API
  • 可以與 遊戲遊玩指令碼 協調運作。
  • 可以執行自訂邏輯,比如任何其他的NetworkBehaviour
  • 舉例而言,DashProcessor類別在啟用時強制覆寫KCC移動速度5秒。

公共API

  • 提供一系列命令,其在內部被立即執行或轉換以與KCC執行流、其功能及目前狀態相容(執行另一系列命令,其寫入到 資料層、安全檢查)。
  • 將複雜性從使用者抽離。
  • 舉例而言,KCC.SetRadius()KCCSettings中設定Radius屬性,並且立即散佈值到碰撞器。

核心迴圈

  • 處理基礎功能性,如物理查詢、碰撞篩選、取消穿透、網路、追蹤碰撞器、腳步偵測、地面貼齊、網路等等
  • 從/往 資料層 讀取寫入。
  • 執行舞台以透過相依性插入來控制移動(互動指令碼)。

以下圖表在一個特定案例中展示了上述的一個簡化的應用:

kcc execution flow example
KCC執行流示例。

Player代表 遊戲遊玩指令碼Environment ProcessorTeleport Processor代表 互動指令碼。執行遵循這個順序:

  1. Player上調用FixedUpdateNetwork()
  2. Player指令碼基於來自鍵盤或搖桿的輸入,以自訂向量來調用KCC.SetInputDirection()
  3. KCC寫入所需的輸入方向到KCCData.InputDirection資料層)之中
  4. KCC上調用FixedUpdateNetwork()
  5. KCC執行一系列的命令,直到針對移動的資料應由 互動指令碼(KCC處理器)來計算
  6. KCC在所有支援這個舞台的處理器上執行PrepareData舞台(在這個案例中是Environment Processor
  7. Environment Processor在內部執行其他舞台集,其結合輸入方向及其他屬性,並且計算KCCData.DynamicVelocityKCCData.KinematicVelocity作為一個結果
  8. 在這個點執行所有舞台,KCC繼續處理實際移動邏輯
  9. KCC結合所有已計算速度及外部差量到位置差量候選
  10. KCC以先前步驟中計算的差量來移動其碰撞器,取消穿透重疊碰撞器,並且重新整理碰撞器的內部清單
  11. KCC在新的已進入/已離開的碰撞器上叫用OnEnter()/OnExit()回調(在這個案例中是Teleport Processor => OnEnter()
  12. Teleport Processor以目標位置來調用KCC.SetPosition()
  13. KCC.SetPosition()立即傳送KCC到一個給定位置,並且設定KCCData.HasTeleported旗標以停止進一步的執行(我們不希望在傳送後繼續移動)
  14. KCC在執行所有回調後恢復核心迴圈
  15. KCC針對早期退出來檢查KCCData.HasTeleported旗標(在這個案例中它被設定為真)
  16. KCC完成目前更新的執行(略過剩餘位置差量)

如同您可能已經猜到,可以透過使用許多不同的處理器來設計移動,各個處理器貢獻/插入其自己的邏輯。在互動章節可以找到更多資訊。

Back to top