- 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