每次黑条触摸对象时,它都会显示有关该对象的信息。
当黑条接触 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
}