2017-07-06 111 views

回答

1

/編輯 - 實際上piojo的計數器的想法更好,只需使用int而不是bool。 一種方法是在腳本中添加一個叫做碰撞的int並將其設置爲0.然後,如果在任何時候碰撞器觸發OnCollisionEnter只是增加它,並在OnCollisionExit中減少它。 這樣的事情應該爲3D工作:

public int collisions = 0; 

void OnCollisionEnter(Collision collision) 
{ 
    collisions++; 
} 

void OnCollisionExit(Collision collision) 
{ 
    collisions--; 
} 

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionExit.html

+2

正如我在我的回答中所提到的,你不能使用bool來做這件事。你需要一個整數計數器,否則只要碰到兩個障礙物就會失敗。這不是一個邊緣情況,因爲你總是與地面碰撞。 – piojo

+1

是的,你是正確的 - 我調整了我的答案 – Fiffe

+0

是的,我也試過這個,但使用布爾值,所以它失敗了一段時間,因爲piojo說。使用計數器會很好,我認爲。謝謝 –

4

不是本身,而是有兩種方法,你可以得到的信息。保持int計數器最簡單,並將其增量爲OnCollisionEnter並遞減爲OnCollisionExit。當計數器爲0時,不存在衝突。

另一種方式,它會告訴你哪些對撞機重疊,但不一定如果他們觸摸,是使用物理功能。注意你有哪種類型的對撞機 - 球體,膠囊,盒子。瞭解對撞機的尺寸/形狀/位置,您可以撥打Physics.OverlapBox,Physics.OverlapCapsulePhysics.OverlapSphere。賦予函數與對撞機相同的形狀,並且它將返回與該空間重疊的碰撞體。 (對於2D對撞機,您可以使用Physics2D.Overlap*功能。)

+0

ow這是非常有益的..謝謝piojo –

+0

@sristy_poka不客氣!我在我的項目中完成了同樣的事情,總是知道玩家是否在場。 – piojo

+0

應該被接受爲答案。 –