MRTK 配備彈性模擬系統,包含多種可擴充且彈性的子類別,提供四維四元數彈簧、三維體積彈簧及簡單線性彈簧系統的綁定。
目前支援 彈性管理器 的 MRTK 元件可利用彈性功能:
彈性管理器
彈性管理器會經過轉換並輸入彈性系統。
啟用自訂元件的彈性可透過兩個步驟達成:
- 操作啟動時呼叫初始化方法,並以目前的主機轉換更新系統。
- 每當需要對更新的目標轉換執行彈性計算時,查詢 ApplyHostTransform。
請注意,彈性系統在操作結束後仍會繼續模擬, (透過彈性管理器更新迴圈) 。 為了阻擋此行為,elastics 自動更新 EnableElasticsUpdate 可設為 false。
預設情況下,當 elastics manager 元件加入遊戲物件時,不會啟用任何變換類型的彈性。
該欄位 Manipulation types using elastic feedback 需啟用以支援特定轉換類型,以建立所選類型的彈性配置與範圍。
彈性配置
類似於 界限控制配置,Elastic Manager 附帶一組配置物件,這些物件可儲存為可腳本物件,並在不同實例或預製件間共享。 設定可以分享並連結成個別可腳本資產檔案,或是巢狀的腳本資產,置於預製件內。 進一步的設定也可以直接在實例上定義,無需連結外部或巢狀的腳本資產。
彈性管理器檢查器會透過屬性檢查器顯示訊息,表示配置是共享還是內嵌於目前實例中。 此外,共享實例無法直接在彈性管理器的屬性視窗中編輯,而是必須直接修改它所連結的資產,以避免共享配置中意外的變更。
Elastics Manager 提供以下變換類型的配置物件選項,每種類型由 彈性配置物件表示:
- 平移彈性
- 旋轉彈性
- 比例彈性
彈性配置物件
彈性配置定義了阻尼諧振子微分系統的性質。 以下屬性可以調整,但 MRTK 已經預設了一組預設值:
- 質量:模擬振盪元件的質量。
- HandK:手搖彈簧常數。
- EndK:端蓋彈簧常數。
- SnapK:彈簧點常數。
- 阻力:阻力/阻尼因子,與速度成正比。
彈性範圍
彈性範圍的設定會依照操作類型而異。 平移與尺度由 體積彈性範圍 表示,旋轉則以 四元數彈性範圍表示。
體積彈性範圍
體積範圍定義了一個三維空間,在此空間中阻尼諧振子可自由移動。
- StretchBounds:代表彈性空間的下界。
- 使用界限:系統是否應該尊重伸展範圍。 若成立,當目標位置的當前迭代超出拉伸範圍時,將施加終端力。
- SnapPoints:系統將要吸附的空間內的點。
- RepeatSnapPoints:將 snap 點重複到無限大。 現有的吸附點會作為模,實際吸附點會被映射到每個吸附點的最接近整數倍。
- SnapRadius:卡點開始推動彈簧的距離。
四元數彈性範圍
四元數範圍定義了一個四維旋轉空間,其中阻尼諧振子可自由旋轉。
- SnapPoints:系統會吸附到的歐拉角。
- RepeatSnapPoints:重複這些快照點。 現有的吸附點會作為模,實際吸附點會被映射到每個吸附點的最接近整數倍。
- SnapRadius:卡點開始以歐拉度推動彈簧的弧角。
彈性範例場景
你可以在場景中找到彈性配置 ElasticSystemExample 的範例。