2017-01-11 3 views
2

黒いバーがオブジェクトに接触するたびに、オブジェクトに関する情報が表示されます。2つのオブジェクトが衝突した場合に1つのイベントしか生成しません。

黒いバーがAオブジェクトに接触すると、非表示のUI_Aが表示されます。 競合が終了すると、UI_Aが消えます。

問題は、AとBの両方のオブジェクトが同時にUI_AUI_Bに接触すると同時に黒いバーが表示されることです。

ブラックスティックが同時に2つのオブジェクトに接触すると、UIオブジェクトが1つしか表示されません。

どうすればよいですか? 私を助けてください!

===================================

using UnityEngine; 
using System.Collections; 

public class TestPopUp : MonoBehaviour { 


    public GameObject UI_A; 
    public GameObject UI_B; 
    public GameObject UI_C; 

    private bool _IsTriggerEnter = false; 



    void OnTriggerEnter(Collider col) 
    { 
     if (col.tag == "A" && _IsTriggerEnter == false) 
     { 
      UI_A.SetActive(true); 
      _IsTriggerEnter = true; 
     } 

     if (col.tag == "B" && _IsTriggerEnter == false) 
     { 
      UI_B.SetActive(true); 
      _IsTriggerEnter = true; 
     } 

     if (col.tag == "C" && _IsTriggerEnter == false) 
     { 
      UI_C.SetActive(true);   
      _IsTriggerEnter = true; 
     } 
    } 

    void OnTriggerExit(Collider col) 
    { 
     if(col.tag == "A") 
     { 
      UI_A.SetActive(false); 
      _IsTriggerEnter = false; 

     } 

     if (col.tag == "B") 
     { 
      UI_B.SetActive(false); 
      _IsTriggerEnter = false; 

     } 

     if (col.tag == "C") 
     { 
      UI_C.SetActive(false); 
      _IsTriggerEnter = false; 

     } 
    } 
} 

Black bar and object A B C

+0

[一度だけ衝突/衝突を検出]の可能性のある重複は(http://stackoverflow.com/questions/41290547/detect-collision-colliding-only-once) –

答えて

0

最も単純な方法は、フラグ変数を使用することです。つまり、初めてブーリアン変数(UIisActive)を作成し、最初の衝突時にその値が変更された場合、最初の衝突後に条件が間違っていてブール値値が元の値に戻って、OnTriggerExitで発生します。また、コードにいくつかの変更を加えて、繰り返しコードを停止する新しいメソッドを作成しました。

void Start() 
{ 
    bool UIisActive= false; 
    bool _IsTriggerEnter = false; 
} 
    void OnTriggerEnter(Collider col) 
    { 
    if(!UIisActive && _IsTriggerEnter == false){ 
     if (col.tag == "A") 
      SAT(UI_A,true); 
     else if (col.tag == "B") 
      SAT(UI_B,true); 
     else if (col.tag == "C") 
      SAT(UI_C,true);   
     } 
    } 

    void OnTriggerExit(Collider col) 
    { 
     if(col.tag == "A") 
      SAT(UI_A,false); 
     else if (col.tag == "B") 
      SAT(UI_B,false); 
     else if (col.tag == "C") 
      SAT(UI_C,false); 
    } 

void SAT(GameObject go,bool state) 
{ 
go.SetActive(state); 
_IsTriggerEnter = state; 
UIisActive=state 
} 
+0

私はそれをあなたのおかげで解決!ありがとうございました。 –

関連する問題