2D 與 3D 物理插值

一般來說,2D 與 3D 的物理插值原理相似。不過兩者還是有幾點差異,以下將說明。

全域與區域插值

  • 3D 物理插值是針對每個 3D 實例的**全域變換**獨立進行的。

  • 2D 則相反,插值是在每個 2D 實例的**區域變換**上進行。

這會產生一些影響:

  • 3D 下,你可以直接透過 Inspector 中每個 Nodephysics_interpolation_mode 屬性,快速切換插值(可設為 On、Off 或 Inherited)。

../../../_images/physics_interpolation_mode.webp
  • 但這也代表,在 3D 中,若 SceneTree 裡有父子節點關係產生的樞軸點,插值時只能做到**大致上**正確。在多數狀況下這沒問題,但某些特殊情境下插值結果會略微不正確。

  • 在 2D 中,插值後的區域變換會在算繪時傳遞給子節點。也就是說,如果父節點的 physics_interpolation_mode 設為 On,但子節點設為 Off,只要父節點移動,子節點依舊會顯示插值效果。只有子節點本身的區域變換不插值。因此,2D 節點的插值開關需要額外規劃。

  • 好處是,在 2D 中,場景樹中的樞軸行為在插值期間能被完整保留,帶來極為流暢的表現。

重設物理插值

每當物件被移動到全新位置、且你不希望發生插值(避免產生「拖影」),就需要手動呼叫 reset_physics_interpolation()

好消息是,在 2D 中,節點初次進入場景樹時會自動呼叫這個方法,減少重複程式碼,也讓舊專案更容易導入本功能。

備註

但如果你是在加入場景樹*之後*才移動物件,仍需像 3D 一樣手動呼叫 reset_physics_interpolation()

2D 粒子

目前 2D 物理插值僅支援 CPUParticles2D。建議將物理更新率設為每秒 20~30 次以上,才能讓粒子效果保持流暢。

Particles2D``(GPU 粒子)目前尚未支援插值,因此建議暫時先轉換為 ``CPUParticles2D 使用(但請備份原始的 Particles2D,以利未來支援時回復)。

其他

  • get_global_transform_interpolated() 目前僅支援 3D。

  • MultiMeshes 同時支援 2D 與 3D。