当退出触发时,手电筒会在触发时关闭,但不会重新打开

时间:2016-09-19 16:34:55

标签: c# unity3d

我真的不明白这个?

当我进入触发区时,手电筒关闭,但是当退出触发区时,手电筒不会再次打开。如果我反转效果,即场景开始时闪光灯熄灭,然后进入触发区时手电筒不转动?这与我用于主房间灯(可以工作)

的脚本相同(带名称的小改动)

因此,使用以下代码,手电筒关闭,我想在进入触发区时将其打开?

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);


      }

   }
 }

有什么想法可以关闭而不是关闭?

由于

2 个答案:

答案 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" />