我真的不明白这个?
当我进入触发区时,手电筒关闭,但是当退出触发区时,手电筒不会再次打开。如果我反转效果,即场景开始时闪光灯熄灭,然后进入触发区时手电筒不转动?这与我用于主房间灯(可以工作)
的脚本相同(带名称的小改动)因此,使用以下代码,手电筒关闭,我想在进入触发区时将其打开?
public class TurnFlashLightOn : MonoBehaviour
{
void Start()
{
GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight");
foreach (GameObject i in allLights)
{
i.SetActive(true);
}
}
void OnTriggerEnter()
{
GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight");
foreach (GameObject i in allLights)
{
i.SetActive(false);
}
}
void OnTriggerExit()
{
GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight");
foreach (GameObject i in allLights)
{
i.SetActive(true);
}
}
}
有什么想法可以关闭而不是关闭?
由于
答案 0 :(得分:1)
微妙但重要的细节:GameObject.FindGameObjectsWithTag
仅搜索活动对象。关闭手电筒后,它将不再显示在该搜索中。
您需要缓存手电筒对象列表。
如果列表永远不会改变(你永远不会创建或销毁手电筒),那么你可以在Start
期间填充一次列表,然后在需要时随时查看列表。
如果列表是动态的,您可以从空列表开始,然后在停用时将任何手电筒添加到列表中。当需要重新打开灯时,激活列表中的每个灯,然后清除列表。
你有很多方法可以做到这一点;基本问题只是你需要一些其他方法来跟踪那些不活跃的对象。
答案 1 :(得分:0)
根据您的代码和您告诉我的内容,您有一个事件,当对象超过阈值时灯会关闭。此阈值包含Event OnTriggerEnter();
Threshold或Zone()不能同时包含两个触发器,并知道它应该触发哪个触发器。我只能建议你有一个If-Else语句,它有助于定义触发器应触发的逻辑。例如 (这是伪代码)
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform" />