- Home /
Two separate OnTriggerEnter() functions playing at the same time.
Hello, I'm using a simple dialogue system for my LD jam game and I have an issue. If I attach the script included below to one character in the scene everything is fine. However, if I attach it to two or more, even when I collide with only one character at a time, the dialogue from the arrays of all characters in the scene will show up on the screen at the same time. I assume it's an issue of scope but after 12-hours of trying to make my first game, I'm not even sure how to phrase this question right. Help would be greatly appreciated.
Here's the script:
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 
 public class DialogOne : MonoBehaviour
 {
     public TextMeshProUGUI textDisplay;
     public string[] sentences;
     public float typingSpeed = 0.01f;
     private int index;
 
     public float lineCoolDown = 3;
     public float lineCoolDownTimer;
 
 
     void OnTriggerEnter(Collider col)
     {
         if (col.tag == "Player")
         {
             StartCoroutine(Type());
             Debug.Log("Hit!");
         }
     }
 
     void OnTriggerExit(Collider col)
     {
         if (col.tag == "Player")
         {
             textDisplay.text = "";
         }
     }
 
     private void Update()
     {
 
         if (lineCoolDownTimer > 0)
         {
             lineCoolDownTimer -= Time.deltaTime;
         }
 
         if (lineCoolDownTimer < 0)
         {
             lineCoolDownTimer = 0;
         }
 
         if (Input.GetMouseButtonDown(0) && lineCoolDownTimer == 0) 
         {
             NextSentence();
             lineCoolDownTimer = lineCoolDown;
         }
     }
 
     IEnumerator Type()
     {
         // yield return new WaitForSeconds(2f);
 
         foreach (char letter in sentences[index].ToCharArray())
         {
             textDisplay.text += letter;
             yield return new WaitForSeconds(typingSpeed);
         }
     }
 
     private void NextSentence()
     {
         if (index < sentences.Length - 1)
         {
             index++;
             textDisplay.text = "";
             StartCoroutine(Type());
         }
         else
         {
             textDisplay.text = "";
         }
     }
 
 }
 
Answer by Forc3ofWill · Apr 22, 2018 at 06:37 AM
Turns out there's such a thing as OnTriggerStay() method which - contrary to the regular Update() method - actually cares if we're colliding with the object that we're trying to attach some per frame logic to.
Good night sleep is great for debugging.
EDIT: Just to reiterate for posterity (in case you found this thread on google months from now). It wasn't a case of two OnTriggerEnter() methods from different objects running at the same time as the name of the question suggested. It was a case of a dummy putting some logic that was meant to be checked every frame (while "Player" stayed inside a trigger collider) in the Update() method rather than OnTriggerStay() method. Hope that helps!
Your answer
 
 
             Follow this Question
Related Questions
Playing Dialogue on Trigger Enter without overlapping sound 1 Answer
how to hide dialogue system until triggered ?? 1 Answer
How to display a characters "dialogue" when entering a collider? 1 Answer
The problems of Collider .... 1 Answer
OnTriggerEnter(hit : Collider) and (other : Collider) 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                