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

本文关键字:退出 手电筒 | 更新日期: 2023-09-27 18:07:57

我真的不明白这个?

似乎发生的是当我进入触发区手电筒关闭,但当退出触发区手电筒不再打开。如果我把效果反过来,也就是当场景开始时闪光灯是关闭的,然后当进入触发区域时手电筒不转?这与我用于主房间灯(有效)的脚本相同(名称略有变化)

所以下面的代码手电筒是关闭的,我想在进入触发区时打开它?

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

      }
   }
 }

知道为什么它会关闭而不是打开吗?

谢谢

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

微妙但重要的细节:GameObject.FindGameObjectsWithTag只搜索活动对象。一旦你关掉手电筒,它就不会再出现在搜索中了。

你需要缓存一个手电筒对象列表。

如果列表永远不会改变(你永远不会创建或销毁手电筒),那么你可以在Start期间填充列表一次,然后在你需要它的时候参考列表。

如果列表是动态的,你可以从一个空列表开始,然后在它被停用时添加任何手电筒到列表中。当该开灯的时候,激活清单上的每一盏灯,然后清空清单。

有很多方法可以做到这一点;最基本的问题是,您需要一些其他方法来跟踪那些不活动的对象。

根据你的代码和你告诉我的,你有一个事件,当一个对象通过一个阈值时,灯将关闭。这个阈值包含事件OnTriggerEnter();

Threshold或Zone()不能同时包含两个触发器,并且知道应该触发哪一个。我只能建议你有一个If-Else语句,它有助于定义触发器应该触发的逻辑。例如(这是伪代码)

  If (EnteringZoneFromStart() = true)
      {OnTriggerEnter()}
  Else If (ExitingZone() = true)
      {OnTriggerExit()}
  Else 
      {OnTriggerEnter()}