OnTriggerEnter() not working in Oculus Go environment? — Oculus
Welcome to the Oculus Developer Forums!

Your participation on the forum is subject to the Oculus Code of Conduct.

In general, please be respectful and kind. If you violate the Oculus Code of Conduct, your access to the developer forums may be revoked at the discretion of Oculus staff.

OnTriggerEnter() not working in Oculus Go environment?

mmdem0mmdem0 Posts: 1
NerveGear
Hey guys,

I really need help on this. I have tried so many forums to get an answer, and nobody has helped. I have five triggers set up in a scene to call an object to go to a starting position, to follow the player for a certain amount of time, then to move off to an end position. I also have triggers that trigger animations of three separate fish, which are supposed to jump over you. None of these work. I have it all set up correctly according to every forum I've searched. I have rigid bodies, mesh colliders, convex on, I made sure that everything is set up in the physics map to collide, etc. It still won't work. It won't even enter the OnTriggerEnter() function, as I even put in a visual debug code. Here is some example code of what I am doing:
//fish controller
public class FishController : MonoBehaviour
{
    public Animator fishAnimator1;
    public Animator fishAnimator2;
    public Animator fishAnimator3;
    void Start()
    {
        fishAnimator1 = GetComponent<Animator>();
        fishAnimator2 = GetComponent<Animator>();
        fishAnimator3 = GetComponent<Animator>();
    }
    public void TriggerFishAnimation(int i){
        if(i == 1)
        {
            fishAnimator1.SetTrigger("FishAnimation");
        }
        if(i == 2)
        {
            fishAnimator2.SetTrigger("Fish2Animation");
        }
        if(i == 3)
        {
            fishAnimator3.SetTrigger("Fish3Animation");
        }
    }
}

//Bird targets
public class BirdTargets : MonoBehaviour
{
    [SerializeField]
    AnimatedBird[] birds;
    [SerializeField]
    Transform startPosition1;
    [SerializeField]
    Transform startPosition2;
    [SerializeField]
    Transform playerFollow1;
    [SerializeField]
    Transform playerFollow2;
    [SerializeField]
    Transform endPosition1;
    [SerializeField]
    Transform endPosition2;

    void Awake() {
    }

    public void BirdsToStartPosition()
    {
        birds[0].SetDestination(startPosition1.position, 10f);
        birds[1].SetDestination(startPosition2.position, 10f);
    }
    public void BirdsToFollowPosition()
    {
        birds[0].SetDestination(playerFollow1.position, 0.1f);
        birds[1].SetDestination(playerFollow2.position, 0.1f);
    }

    public void BirdsToEndPosition()
    {
        birds[0].SetDestination(endPosition1.position, 0.05f);
        birds[1].SetDestination(endPosition2.position, 0.05f);
    }
}

//Animated Birds
public class AnimatedBird : MonoBehaviour
{  
    [SerializeField]
    int targetNumber;
    [SerializeField]
    float smoothSpeed;
    DemoMovementRig rig;
    Vector3 targetPos;
    public Vector3 startingPos {get; private set;}
    // Start is called before the first frame update
    void Start()
    {
        rig = FindObjectOfType<DemoMovementRig>();
        targetPos = this.transform.position;
    }
    // Update is called once per frame
    void Update()
    {
            FlyToTarget(); 
    }
    void FlyToTarget()
    {
        transform.LookAt(targetPos);
        transform.position = Vector3.Lerp(transform.position, targetPos, smoothSpeed * Time.deltaTime);
    }
       public void SetSpeed(float f)
    {
        smoothSpeed = f;
    }
    public void SetDestination(Vector3 v)
    {
        targetPos = v;
    }
    public void SetDestination(Vector3 v, float s)
    {
        targetPos = v;
        smoothSpeed = s;
    }
}

//eventcontroller
public class ZiplineEventsController : MonoBehaviour
{
    AnimatedBird[] Birds;
    BirdTargets birdTargets;
    FishController fishController;
    void Awake(){
        Birds = FindObjectsOfType<AnimatedBird>();
        birdTargets = gameObject.GetComponent<BirdTargets>();
        fishController = gameObject.GetComponent<FishController>();
    }
    public void BirdEvents(string s)
    {
        if(s.Equals("start"))
        {
            birdTargets.BirdsToStartPosition();
        }
        else if(s.Equals("follow"))
        {
            birdTargets.BirdsToFollowPosition();
        }
        else if(s.Equals("end"))
        {
            birdTargets.BirdsToEndPosition();
        }
        else
        {
            //used for visual debugging
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.position = new Vector3(-4.31f, 35.47f, 40.97f);
            cube.transform.localScale = new Vector3(5.0f, 5.0f, 5.0f);
            //Debug.LogError("Bird events broke.");
        }
    }
    public void TriggerFishAnim(int i){
        fishController.TriggerFishAnimation(i);
    }
}

//demomovementrig
public class DemoMovementRig : MonoBehaviour
 {
        public Transform startingPostion;
        public Transform endingPosition;
        ZiplineEventsController zipEvents;
        BirdTargets[] birdTargets;
        [SerializeField]
        float speedModifier;
        bool enableMovement = false;
   
        //following four functions all work
        void Awake() {
            zipEvents = GetComponent<ZiplineEventsController>();
        }
        void Start()
        {
            enableMovement = false;
            this.transform.LookAt(endingPosition);
        }
        // Update is called once per frame
        void Update()
        {
            if(enableMovement)
            {
                TranslateCharacter();
            }
        }
        //draws the line that the user follows
        void OnDrawGizmos() {
            Gizmos.color = Color.red;
            Gizmos.DrawLine(startingPostion.position, endingPosition.position);
        }

        //these do not work
        void OnTriggerEnter(Collider other) {
            if(other.gameObject.CompareTag("EndTrigger"))
            {
                ResetPosition();   
            }
            if(other.gameObject.CompareTag("BirdsStart"))
            {
                zipEvents.BirdEvents("follow");
            }
            if(other.gameObject.CompareTag("BirdsStop"))
            {
                zipEvents.BirdEvents("end");
            }
             if(other.gameObject.CompareTag("Fish1"))
            {
                zipEvents.TriggerFishAnim(1);
            }
            if(other.gameObject.CompareTag("Fish2"))
            {
                zipEvents.TriggerFishAnim(2);
            }
            if(other.gameObject.CompareTag("Fish3"))
            {
                zipEvents.TriggerFishAnim(3);
            }
        else
        {
            //used for visual debugging
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.position = new Vector3(-4.31f, 35.47f, 40.97f);
            cube.transform.localScale = new Vector3(5.0f, 5.0f, 5.0f);
        }//end of else
        } // end of on trigger enter

        public Vector3 GetBirdTargetPos(int i)
        {
            if (birdTargets[i] != null)
            {
                return birdTargets[i].transform.position;
            }
            else
            {
                Debug.LogError("Position not correctly fetched");
                return Vector3.zero;
            }

        }
//other functions in class control buttons, which work but I did not include to save space
    }

Please someone help me figure out why this code isn't working I've been staring at it for over two weeks

Comments

  • catskullcatskull Posts: 1
    NerveGear
    I have the same issue... none of my trigger callbacks function. Development for the Oculus is infuriating; it's haphazard and the tooling stinks. 
  • AurelinatorAurelinator Posts: 3
    NerveGear
    I don't think this has anything to do with Oculus. It's a matter of using Unity. Have you tried simplifying the problem? Whenever I have issues like this, it's usually something odd. So I boil it down to a simple thing - can I get a... falling cube, to fall through another cube (that is a trigger) that has a script and fire the OnTriggerEnter? 

    In order to trigger that, the following conditions must be met: Both objects must have colliders, one of the objects must have a rigidbody (in this case the falling cube). If you can get that working, you can slowly try to understand what about your current set up is not working. 
Sign In or Register to comment.