![](/img/trans.png)
[英]'Collision2D' does not contain a definition for 'GameObject' (while using 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 的碰撞檢測模式設置為Continuous
或Continuous Dynamic
。
簡單的 go 到 object 的剛體並更改 c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.