2017-04-17 52 views
2

我有一顆子彈,當它達到目標時,它應該增加1分,但得分增加2.子彈是一個膠囊,有對撞機和rigibody並且目標是用對撞機缸和rigibody得分提高2點,應該提高1點

代碼上子彈

public class Bullet : MonoBehaviour { 

float lifespan = 2; 

void Start() 
{ 
    // destroy the bullet 
    Destroy(gameObject, lifespan); 
} 

void OnTriggerEnter(Collider other)  //collider event 
{ 
    if (other.gameObject.CompareTag("Score"))  
    { 
     Score.score = Score.score + 1; 
    } 
} 
} 

比分代碼

public class Score : MonoBehaviour { 

public static int score;  // The player's score. 

Text text;      // Reference to the Text component. 

void Start() 
{ 
    // Set up the reference. 
    text = GetComponent<Text>(); 

    // Reset the score. 
    score = 0; 
} 

void Update() 
{ 
    // Set the displayed text to the score value. 
    text.text = "Score: " + score; 
} 
} 
+3

使用調試器並檢查方法'OnTriggerEnter'是否啓動兩次。 –

+0

請看看這個請:https://forum.unity3d.com/threads/ontriggerenter-is-called-twice-sometimes.95187/另外,請檢查是否有任何對象的2個碰撞器請。 – pasotee

回答

4

我已經解決了這個確切的問題之前,但我搜索因爲它標記爲重複,但無法找到它。它可能被OP刪除。

有2種可能的原因,爲什麼你的分數可以更新多次。

。您的腳本(Bullet)連接到您的遊戲對象多次。這很可能是問題所在。它很可能被附加到隨機的空GameObject。

修復:

一個。檢查是gameObject.AddComponent<Bullet>();是在項目中的任何腳本沒有任何地方。 AddComponent將爲您的GameObject添加新的Bullet。

B。通過編輯器在GameObjects上搜索重複的腳本。

選擇Bullet腳本,去資產 - >在場景查找引用。它會向您顯示每個擁有此腳本的GameObject。除了你的子彈GameObject之外,將它從它們中移除。

enter image description here

。你對遊戲對象多於一個的對撞機。也許是一個孩子的對撞機。你必須找到一種方法來處理這個問題。如果是這種情況,您可以通過將它們放入單獨的標記並檢查它來忽略兒童碰撞體。

您已經在檢查很好的標籤。只是將孩子對撞機的標籤更改爲不是「得分」以便other.gameObject.CompareTag("Score")不會是true

+1

謝謝,在空的預製對象上有腳本。修復它 –