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
}
可能重复的