2013-08-16 75 views
7

我有一個網格物體碰撞物體和一個帶球體碰撞物體的物體。如果兩者相撞,我希望預製件的實例被銷燬。 我寫了一個腳本如下:OnCollisionEnter()在Unity3D中不起作用

void OnCollisionEnter(Collision c) 
{ 
    if(c==target) 
     Destroy(transform.gameObject); 
    print("something");     //doesn't get printed 
} 

但它無法正常工作。我試圖在兩個對象上切換isTrigger

+0

你確定了對撞機正在進入/擊中對方? –

+1

什麼類型是「target」?我不認爲'c == target'將永遠是'true',但你仍然應該打印你的信息。您可能正在尋找'c.gameObject == target'。 http://docs.unity3d.com/Documentation/ScriptReference/Collision-gameObject.html –

+0

對撞機正在彼此交叉,我從不同角度在場景視圖中看到。 –

回答

5

確保其中一個連接有非運動學剛性體。從Unity文檔採取:

當兩個撞機之間的碰撞發生並且如果它們中的至少一個具有一個剛體連接,三條碰撞消息被髮送到附連到它們的對象。這些事件可以通過腳本進行處理,並且允許您在使用或不使用內置NVIDIA PhysX引擎的情況下創建獨特的行爲。

從這裏:Unity3D MeshCollider

+0

我將非運動剛體添加到沒有重力的物體上。一些錯誤出來說: 演員:: updateMassFromShapes:計算演員的網格形狀之一的網格慣性張量失敗!請更改網格幾何體或手動提供張量! –

+0

在我的項目中,球體是靜止的,而另一個物體的移動只是因爲它是另一個物體的子物體,只能通過變換和旋轉來移動。 –

+0

網格形狀的錯誤可能意味着你有一個網格不能被轉換成一個好的物理剛體。你可以用一個primitve替換網格,看看是否有幫助? – theodox

1

您是否嘗試過使用OnTriggerEnter()類和對象上的撞機設置爲觸發?

如果它並不需要告訴什麼OBJET其碰撞你可以做一個簡單的

void OnTriggerEnter(){ 
Destroy(transform.gameObject); 
} 

編輯:

而且我已經做了OnCollision這樣

private string hitobject; 

void OnCollisionEnter(UnityEngine.Collision hit) 
{ 
    hitobject = hit.gameObject.tag; 
    if(hitobject == "Plane") 
    { 
     isgrounded = true; 
    } 
} 

的無對象是觸發器,他們不需要ridgid機構來工作。

15

我有同樣的問題OnCollisionEnter沒有被調用,發現這個問題。

對我來說,問題是我在製作2D遊戲,所以答案就是使用OnCollisionEnter2D函數。

+7

除了你之外,沒有人在整個互聯網上都提到過這個。 –

+5

謝謝! 「Collsion collsion」論證也必須是「Collision2D」。 – OdraEncoded

2

看一看this table

如果你希望你的OnCollisionEnter被稱爲確保:

(a)兩個對象都附有對撞機。

(B)的對象都不是一個觸發對撞機(這會發出OnTrigger功能&不OnCollisionEnter)

(c)一個對象(並不重要的人)是剛性的,非運動學的非靜態物體(第二個不一定是剛體)&。 (d)由於計算困難,MeshCollider可能難以與其他網格對撞機發生碰撞,請謹慎使用它們。 (e)確保兩個對象在同一圖層中。

example colider configuration

相關問題