2017-04-17 2 views
2

私は弾丸を持っています。標的に当たったらスコアが1ずつ増加しますが、スコアは2増加します。弾丸は、ターゲットは弾丸1を増やす必要があるときにスコアが2ずつ増加する

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; 
    } 
} 
} 

スコアコードのコライダーとシリンダとrigibody

コードは、私が前にこの正確な問題を解決してきましたが、私が検索

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」が2回起動されているかどうかを確認します。 –

+0

これを見てください:https://forum.unity3d.com/threads/ontriggerenter-is-called-twice-sometimes.95187/また、オブジェクトのいずれかに2つのコライダーがあるかどうか確認してください。 – pasotee

答えて

4

ですこれを重複としてマークしてもそれを見つけることはできませんでした。おそらくOPによって削除されたでしょう。

スコアが複数回更新される可能性がある理由は2つあります。

.Yourスクリプト(Bullet)がゲームオブジェクトに複数回アタッチされています。これは問題の可能性が非常に高いです。ランダムな空のGameObjectにアタッチされている可能性が非常に高いです。

修正:

.Check gameObject.AddComponent<Bullet>();はどこでもあなたのプロジェクト内の任意のスクリプトではないこと。 AddComponentはGameObjectに新しいBulletを追加します。

。エディターを介してGameObjectsの複製スクリプトを検索します。

あなたBulletスクリプトを選択し、資産に行く - >シーンでの参照の検索。このスクリプトがアタッチされているすべてのGameObjectが表示されます。あなたの弾丸GameObjectを除いてそれらのすべてからそれを削除します。

enter image description here

。あなたのゲームオブジェクトに複数のコライダーを持っています。子供のような衝突者かもしれない。それを処理する方法を見つける必要があります。このような場合は、子の衝突を無視して別のタグに入れて確認することができます。

既に適切なタグを確認しています。子供のコライダーのタグを"スコア"でないものに変更すると、other.gameObject.CompareTag("Score")trueになりません。

+1

ありがとう、空のプレハブオブジェクトにスクリプトがありました。それを固定した –

関連する問題