我只想在发生两个对象碰撞时生成一个事件



每次黑条触摸对象时,它都会显示有关该对象的信息。

当黑条接触 A 对象时,它会显示隐藏的UI_A。当冲突结束时,UI_A消失了。

问题是当 A 和 B 对象都接触 UI_A 并且出现UI_B时,黑条同时出现。

我希望当黑棒同时接触两个物体时,只出现一个UI物体。

我该怎么办?请帮帮我!

====

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

黑条和对象 A B C

最简单的方法是使用标志变量,这意味着您可以创建一个布尔变量( 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
}

最新更新