2017-07-24 60 views
-1

我試過了一切。無論我放在其下的什麼樣的GameObject(立方體等),玩家都會落空。它有一個圓形的礦工和一個剛體。球員正在落地

如何從通過地板

我應該指出,停止下落物體,玩家應該死一次談到接觸到任何東西,所以我不知道如何處理這一點。

+1

對撞機....因爲它是2D對象,您是否將2D對撞機附加到對象和地板上? – Programmer

+0

是的,我已將2D Collider安裝在地板上。但它設法通過 – ROOT

+0

不僅僅對地板而且對另一個對象也是如此。此外,兩者都必須禁用isTrigger。如果這是你所做的,那麼發佈GameObject的Inspector的屏幕截圖。 – Programmer

回答

0

對於您希望播放器通過的對象,觸發器必須是真實的。玩家isTrigger應始終爲假。

玩家需要附上一個rigidbody2D。

在您的代碼上進行調試,對於觸發的碰撞檢查OnTriggerEnter2d和非觸發的碰撞檢查OnCollisionEnter2D進行檢查。

3

如果對象在地板上下落,這裏是要檢查的事情。

。是否將Collider附加到該對象?如果沒有,則將Collider或Collider2D附加到該對象。

。是否在任何物體碰撞器上啓用觸發器?如果是,則在兩個對撞機上禁用IsTrigger。

。如果Rigidbody附加到GameObject上,那麼請確保玩家在點擊「Play」之前比樓層高100%,否則會遇到更多問題。

。GameObject的大小可能很小。真的很小。對象在與另一個對象發生衝突之前的大小有限制。嘗試調整對象的大小,然後將相機移回。

如果我爲我的播放器禁用isTrigger,那麼它將無法通過我需要它的其他對象去通過 。

這根本不是問題。你可以使用圖層來讓Unity設置哪些對撞機可以與另一個碰撞。只需禁用isTrigger然後使用:

對於2D

Physics2D.IgnoreCollision(yourFirstCollider, yourOtherCollider, true); 

Physics2D.IgnoreLayerCollision(yourLayer, yourOtherLayer, true) 

對於3D

Physics.IgnoreCollision(yourFirstCollider, yourOtherCollider, true) 

Physics.IgnoreLayerCollision(yourLayer, yourOtherLayer, true); 

這將讓玩家不會穿過場地,而是穿過任何其他你想要的物體。您也可以從編輯器設置中執行此操作...編輯 - >項目設置 - >物理 - >或編輯 - >項目設置 - >物理2D

玩家應該死一次它與任何東西接觸,所以 我不知道如何處理這個

這是無關的問題,但OnCollisionEnter2D用於檢測collsion。你可以在播放器上撥打Destroy

void OnCollisionEnter2D(Collision2D collision) 
{ 
    Destroy(player); 
} 

編輯:

如果您還需要當玩家接觸其他對撞機來檢測,但不希望他們實際上對撞機,那麼你可以做什麼上面,然後添加描述我子對象與球員的碰撞。這些子對象將啓用isTrigger。然後,您可以使用OnTriggerEnter函數來檢測那些不是地板的物體之間何時發生碰撞。

void OnTriggerEnter(Collider other) 
{ 

} 
+0

我是Unity的atm noob,可能是一個愚蠢的問題,但我是否將這段代碼粘貼到播放器腳本中? 'Physics2D.IgnoreCollision(yourFirstCollider,yourOtherCollider,true);' – ROOT

+0

查看完整示例的[doc](https://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html)。您需要將Collider2D傳遞給函數。順便說一句,我建議你使用'Physics2D.IgnoreLayerCollision'來代替你只需要傳遞圖層編號。 'Physics2D.IgnoreLayerCollision(3,5,true)'這意味着在第3層和第5層之間沒有collsion。Google「如何在Unity中創建圖層」瞭解更多信息。 – Programmer