2D 與 3D 物理插值
一般來說,2D 與 3D 的物理插值原理相似。不過兩者還是有幾點差異,以下將說明。
全域與區域插值
3D 物理插值是針對每個 3D 實例的**全域變換**獨立進行的。
2D 則相反,插值是在每個 2D 實例的**區域變換**上進行。
這會產生一些影響:
3D 下,你可以直接透過 Inspector 中每個
Node的 physics_interpolation_mode 屬性,快速切換插值(可設為 On、Off 或 Inherited)。
但這也代表,在 3D 中,若 SceneTree 裡有父子節點關係產生的樞軸點,插值時只能做到**大致上**正確。在多數狀況下這沒問題,但某些特殊情境下插值結果會略微不正確。
在 2D 中,插值後的區域變換會在算繪時傳遞給子節點。也就是說,如果父節點的
physics_interpolation_mode設為 On,但子節點設為 Off,只要父節點移動,子節點依舊會顯示插值效果。只有子節點本身的區域變換不插值。因此,2D 節點的插值開關需要額外規劃。好處是,在 2D 中,SceneTree 裡的樞軸行為在插值下可以完美保留,帶來極為流暢的效果。
重設物理插值
每當物件被移動到全新位置、且你不希望發生插值(避免產生「拖影」),就需要手動呼叫 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。