ControllerManager 實例管理其指定的 RootPart 的模擬動作控制。與 ControllerPartSensors 一起,可用於建立物理基礎的角色控制器。
核心設定
ControllerManager 需要一個 BasePart 作為根使用。移動力和零件感應將在這個部分上。
將零件群組為組織的Model實例,與其他零件一起。
將 ControllerManager 實例添加到模型。如果 控制器管理器 初始不出現在對象插入選單中, 取消 在選單的 插入設定 中顯示「僅顯示建議對象」。
感應器設定
A 偵測使用相同代碼偵測地板和梯子的零件。
插入 ControllerPartSensor 作為 根部件 的子孫,並將其重命名為 地面感應器 以便更容易識別其用途。然後,在 屬性 窗口中,將其 SearchDistance 屬性設為 2 ,但將其 SensorMode 留為 地板 。
插入另一個 ControllerPartSensor 作為 根部零件 的子孫,並將其重命名為 攀爬感應器 。然後,在 屬性 窗口中,將其 SearchDistance 屬性設為 1 並將其 SensorMode 設為 梯子 。
控制器設定
控制器實例,例如 GroundController 和 ClimbController 告訴管理部分如何與世界互動,與你在 感應器設定 期間配置的感應器一起工作。
插入 GroundController 和 ClimbController 兩個作為 ControllerManager 的孩子。
選擇新的 GroundController 實例,然後,在 屬性 窗口中,將其 GroundOffset 屬性設為在管理部分上方 "漂浮" 的值。重要的是,這個值必須小於 值的 地面感應器 ,因為該感應器如果失去對地面的感知並停止其力量在零件上,就會無效化。
鏈接參考
要完成核心設定,您需要將 ControllerManager 實例的各種屬性鏈接到主 Model 中的對象。
選擇 ControllerManager 實個體、實例。
在 屬性 窗口中,單擊以下各個屬性,然後,返回 導航器 窗口,單擊對應的實例來完成綁定接。
- 將 ActiveController 屬性鏈結到 地面控制器 個體、實例。
- 將 RootPart 屬性鏈結到你命名的零件 RootPart 。
- 將 ClimbSensor 屬性鏈結到 攀爬感應器 個體、實例。
- 將 GroundSensor 屬性鏈結到 地面感應器 個體、實例。
測試
配備 感應器 和 控制器 以及 連結參考,您可以在 Studio 測試控制器。
使用 執行 模式開始遊戲測試 ( F8 ),因為你不需要在此情況下插入你的虛擬人偶角色。
根部 應在你在GroundController.GroundOffset中設置的值上升空中。它也應該旋轉以與 ControllerManager.FacingDirection 向量力對齊。
在執行階段時變更 MovingDirection 和 FacingDirection 向量的 ControllerManager 來實驗不同的移動和面向方向。也可以試著使用 GroundController 實例的不同屬性,例如 AccelerationTime 、 DecelerationTime 和 GroundOffset 。
控制器管理器 地面控制器
自訂感應器
ControllerPartSensor.SensorMode 選項的 Floor 和 Ladder 執行準確的Humanoid 感應器代碼,讓您可以使用它們進行回退兼容。然而,您也可以自定义如何和何時偵測到可行走和攀爬的零件,最終改變管理零件走路/攀爬時間。
將 ControllerPartSensor.UpdateType 從 閱讀 切換到 手動 。
- 閱讀 會觸發輸出屬性與您的 SensorMode 每次閱讀相對應更新。它本質上將感應器置於「僅讀」模式,任何你寫入這些屬性的內容都會被其內部感應行為覆蓋。
- 手動 關閉內部感應行為。輸出屬性是免費的,您可以寫任何您喜歡的方式,而 SensorMode 不會做任何事情。
創建一個執行自己感應邏輯的腳本,並將輸出寫入您的感應器輸出屬性。通常您會使用空間查詢,例如 WorldRoot:Raycast() 或 WorldRoot:Blockcast() ,返回 RaycastResult 。您的腳本可以然後使用結果屬性並將它們設置為感應器等值:
請注意,您需要管理查詢的執行頻率以及更新感應器實個體、實例。
ControllerManager 將繼續使用已割り配給它的感應器,取得你傳給它的資料。