2016-08-06 6 views
0

私はこの上に私の髪を引き裂いている!ユニティの中で、プレイヤーが衝突したオブジェクトが「キル」タグを持っている場合、プレイヤーはレスポンスします。私が"Pick Up"以外に他のタグを使用している場合、それは単にすべてでそれを検出しないことに思えるタグが機能しないのはなぜですか?

void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.CompareTag("Pick Up")) 
    { 
     other.gameObject.SetActive(false); 
     count = count + 1; 
     SetCountText(); 
     audio.Play(); 
    } 
    else if (other.gameObject.CompareTag("Kill")) 
    { 
     Respawn(); 
    } 
} 

:明らかな理由もなく、これは動作しませんので、これは、非常に難しい作業になりつつあります。私はタグを逆にして別のオブジェクトに無駄に追加しようとしました!

私のRespawn()も正常に機能しています。線の上にこれを追加すると、コンソールには何も送信しません:

Debug.Log("Respawn"); 
Respawn(); 

私も、私がコピーされ、ユニティインスペクターウィンドウから、それを貼り付けているように私には、スクリプト内の右のタグをチェックしています確信しています。ここに何か間違いがありますか?

Inspector Window

また、ここに私のobbjectの内部RigidBodyの設定は以下のとおりです。それが正常に動作しなければならないよう RigidBody

すべてが見えますが、それはしていません。これはなぜですか、どうすれば修正できますか?

答えて

1

これは論理エラーです。 else文を削除します。 else文では、最初のif文が真であれば、次のif文はチェックされません。

if (other.gameObject.CompareTag("Pick Up")) 
{ 
    other.gameObject.SetActive(false); 
    count = count + 1; 
    SetCountText(); 
    audio.Play(); 
} 

if (other.gameObject.CompareTag("Kill")) 
{ 
    Respawn(); 
} 

EDIT

Killタグを使用してゲームオブジェクトがを確認そのIs Trigger性質を持っていることを確認します。また、そのGameObjectに添付されているRigidbodyがあることを確認してください。

+0

elseを削除してもうまくいきませんでした。 – Klink45

+0

あなたは 'OnTriggerEnter(Collider other)'関数に** if(other.gameObject.CompareTag( "Kill")) 'を入れて、今度は' Debug.Log( "1") 'をif文はif文の中に 'Debug.Log(" 2 ")'と書かれています。 – Programmer

+0

まだ動作しません。 – Klink45

関連する問題