彈性系統 — MRTK2

彈性系統

MRTK 配備彈性模擬系統,包含多種可擴充且彈性的子類別,提供四維四元數彈簧、三維體積彈簧及簡單線性彈簧系統的綁定。

目前支援 彈性管理器 的 MRTK 元件可利用彈性功能:

彈性管理器

彈性系統2

彈性管理器會經過轉換並輸入彈性系統。

啟用自訂元件的彈性可透過兩個步驟達成:

  1. 操作啟動時呼叫初始化方法,並以目前的主機轉換更新系統。
  2. 每當需要對更新的目標轉換執行彈性計算時,查詢 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 的範例。

彈性範例場景