簡體   English   中英

GameObject 的快速滑動移動不會與 Colliders 發生碰撞

[英]Fast swipe movement of GameObject does not collide with Colliders

我正在 2D 環境中開發 Unity 游戲。 玩家GameObject附加了一個Rigidbody2D 滑動時它會水平移動。 當滑動速度太快時,它不會與Colliders發生碰撞。 也許它在檢測到碰撞之前改變了它的變換 position? 滑動速度慢時不會發生這種情況。

根據您的問題,我假設您正在Update()函數中移動對象(如果沒有,請糾正我)。 這意味着您每幀都將對象移動一定量。 但是,Unity 在不同的時間間隔(固定時間步長, https: //docs.unity3d.com/Manual/class-TimeManager.html)檢查碰撞器並進行物理計算。

就在對象碰撞之前,檢查碰撞器。 Unity 計算每個Fixed Timestep碰撞器(默認為每秒 0.02 次)。 如果 unity 未檢測到碰撞,則意味着您的對象相交的時間少於Fixed Timestep ,或者換句話說,它們移動得非常快(就像您描述的情況一樣)。 解決此問題的一種(壞)方法是減少物理計算之間的時間量。 但是,這會大大降低您的程序效率。

相反,請考慮在函數FixedUpdate()移動您的對象,以便該對象僅在每次物理檢查碰撞時移動。 這應該可以解決您的問題。

看看第三個答案(由 Garth-Smith 提供): https : //forum.unity3d.com/threads/rigidbody-2d-wont-collide-with-another-object-when-its-moving-really-fast。 248786/

我特別想強調的部分:

如果你有一個 Rigidbody2D,你應該在FixedUpdate() 中使用rigidbody2D.MovePosition(Vector2) 移動它。 這將在空間中移動 Rigidbody2D,而不是將其從 A 點傳送到 B 點。

關於 Raycasts 的第二部分對於您的問題應該不是必需的,但是如果您繼續遇到問題,您可以使用它們來檢查 jdweng 在他的評論中所說的范圍。

如果您不熟悉 Raycast,這里有幾個地方可以了解它們:https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html https://unity3d.com/learn/tutorials/topics/physics/raycasting

如果你的物體移動得太快,它會簡單地忽略碰撞,因為它從不接觸實際的碰撞器——它只是跳過它。

為了解決這個問題,您需要預測碰撞何時發生並在正確的時刻觸發它。

如果滑動不是太快,如pixlark所說,將碰撞檢測設置為連續可能會有所幫助。

確保您的 Rigidbody2D 的碰撞檢測模式設置為ContinuousContinuous Dynamic

簡單的 go 到 object 的剛體並更改 c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM