Search code examples
c#unity-game-enginetriggerscollision-detection

Prevent a Trigger From another trigger unity


How do i prevent a trigger from triggering when another trigger is activated. When a touch trigger is activated another triggered is activated without (anything noticeable in the code ) forcing that.

[Trigger 1 (The first one to be activated)]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Trigger1 : MonoBehaviour {

    private void OnTriggerEnter(Collider other)
    {
        Destroy(GameObject.Find("Block2"));
    }
}

[Trigger 2 (the one to be activated after trigger one for no reason)]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Level2Win : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        SceneManager.LoadScene("level3");
    }
}

Green Block = first trigger Red Block = second trigger

What the level looks like


Solution

  • The concept is to use an additional bool variable and an if statement in the trigger body. You could even use the built in 'enabled' property, remembering that triggers will fire regardless.

    public class Trigger1 : MonoBehaviour {
     public Trigger2 trigger2;
     void Start()
      {
        trigger2.enabled=false;
      }
      private void OnTriggerEnter(Collider other)
      {
         trigger2.enabled=true;
      }
    

    }

    public class Trigger2 : MonoBehaviour {
    private void OnTriggerEnter(Collider other)
    {
     if (enabled)
        {do something else}
    }
    

    }