2016-06-22 68 views
1

所以在我的遊戲中,有一支噴射子彈的槍,並且我試圖在與子彈相撞時使gameObject摧毀。子彈是基於一個gameObject(膠囊)。到目前爲止,我已經試過這兩個腳本:對象沒有被子彈射擊時被破壞 - UNITY3D C#

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 

void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(col.gameObject); 
    } 
} 
} 

和:

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 


void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(this); //the difference between the two is that I changed "col.gameObject" to "this" 
    } 
} 
} 

我拍攝的對象,但它沒有消失/自我毀滅。我怎樣才能解決這個問題?

這裏有一個視覺,如果它可以幫助:Visual

+0

看來您的原始代碼正在銷燬子彈,而不是它擊中的對象。 –

+0

將以下代碼行添加到函數的頂部,並告訴我們當您再次嘗試時在日誌中顯示的內容:Debug.Log(「name:」+ col.gameObject.name);'Debug'。 Log(「matches:」+(col.gameObject.name ==「Bullet」)。ToString());',如果你沒有得到任何日誌消息也告訴我們。 –

+0

@SCOTTChamberlain如果日誌在控制檯下,那麼我沒有得到任何日誌消息。 –

回答

0

這是一個2D遊戲我做了一段時間後的例子,但我認爲它可能有幫助。

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.tag == "Destroyable") 
    { 
     Destroy(other.gameObject); 
    } 
} 

我用這個來破壞某些塊時,玩家將拍攝他們很多次,只是他們切換到3D撞機和觸發,但它應該做雅的伎倆(我希望^^)。

編輯:此腳本應附於你的子彈預製

+0

沒有工作,我已經做了代碼錯誤,那就是: 無效OnTriggerEnter(撞機等) { 如果(other.tag == 「子彈」) { 銷燬(其它.gameObject); } } } 我是否必須對Colliders或觸發器做任何事情? –

+0

看起來像代碼會摧毀子彈,你還必須摧毀你正在拍攝的目標物體。使用「Enemy」或其他東西標記該塊並嘗試在碰撞時摧毀它們 – K0D3R

+0

您能否爲我提供另一個代碼來執行此操作?對不起,我3天前開始使用Unity,所以我非常新。 –

4

this指呼叫者(this is basic OOP)的對象實例,即whenshot,而不是gameObject。所以第二個樣本實際上是gameObject所附的腳本實例。

第一個腳本在技術上是細,並且應該工作,提供滿足這些條件:

  1. 要麼射彈(子彈)或靶(或兩者)具有非運動剛體部件附接。 (Unity docs.
  2. 兩者都有3D Collider組件。
  3. 每一個的名字子彈與目標相撞的gameObject是正好是「子彈」。
  4. 所有炮彈對象都將此腳本作爲組件。

一些建議

使用預製件和標籤:把你的子彈原始並將其存儲爲一個預製。將標籤添加到名爲「Bullet」的預製件中。對目標執行相同操作並將其標記爲「目標」。將玩家標記爲「玩家」。在「gunController」中,設置一個對bullet預製件的引用,並使它在你使用的任何觸發器上實例化子彈。在項目符號的腳本中,使用CompareTag("Target")而不是==並銷燬目標gameObject和this.gameObject。

在我看來,以上是你想要的行爲。如果是這樣的話,碰撞和破壞之間就沒有延遲,因此不需要模擬任何物理。除非你與子彈/目標有一些其他的物理相互作用,否則將沒有剛體的那個標記爲觸發器。

一個強烈建議下

通過統一的教程去。

0

好吧,所以我想通了,這有點奇怪,但顯然我讓子彈移動得太快......我不得不放慢「Bullet_Forward_Force」浮動到大約150f,以使其工作。感謝所有回答的人。

0

我不能評論,所以我會做一個答案:

可以使子彈走的快,只需設置碰撞檢測continious動態。

它的成功率幾乎達到了100%。

+0

謝謝,我會嘗試,當我可以。 –