Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 我只想在两个对象碰撞的情况下生成一个事件_Unity3d - Fatal编程技术网

Unity3d 我只想在两个对象碰撞的情况下生成一个事件

Unity3d 我只想在两个对象碰撞的情况下生成一个事件,unity3d,Unity3d,每次黑条接触对象时,它都会显示有关该对象的信息 当黑条接触对象时,它显示隐藏的UI\u A。 当冲突结束时,UI\u A消失 问题在于,当A和B对象同时接触UI\u A和UI\u B时,黑色条会同时出现 我希望当黑色棒同时接触两个对象时,只显示一个UI对象 我该怎么办? 请帮帮我 =================================== using UnityEngine; using System.Collections; public class TestPopUp : Mo

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

当黑条接触对象时,它显示隐藏的
UI\u A
。 当冲突结束时,
UI\u A
消失

问题在于,当A和B对象同时接触
UI\u A
UI\u 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;

        }
    }
}

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