Weird text field bug?

Hey guys,
I’m working on my Bachelor project right now and encountered a weird bug with my Dialogue script.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextWriting : MonoBehaviour
{
    [SerializeField] string dialogue;
    [SerializeField] Text textAusgabe;
    [SerializeField] GameObject textFenster, textFieldPressF;
    bool visited, textWritten, stopWriting;
    [SerializeField] float waitForSec;
    

    private void FixedUpdate()
    {
        //Wenn Text Aufbau vorzeitig abgebrochen, dann fülle die Textbox sofort komplett aus
        if (Input.GetKeyDown(KeyCode.F) && !textWritten)
        {
            stopWriting = true;
            textAusgabe.text = "";
            textAusgabe.text = dialogue;
        }
        //Wenn Text fertig geschrieben wurde, schließe das Dialog Fenster
        else if(Input.GetKeyDown(KeyCode.F) && textWritten)
        {
            textFieldPressF.SetActive(false);
            textAusgabe.text = "";
            textFenster.SetActive(false);
            StopAllCoroutines();
            gameObject.SetActive(false);
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject.name);
        if (other.CompareTag("Player") && !visited)
        {
            textAusgabe.text = "";
            visited = true;
            textWritten = false;
            stopWriting = false;
            textFenster.transform.localScale = new Vector3(1, 0, 1);
            Coroutine animBox = StartCoroutine(AnimateTextbox());
        }
    }
    
    IEnumerator AnimateText(string strComplete)
    {
        int i = 0;
        textAusgabe.text = "";
        while (i < strComplete.Length)
        {
            if (stopWriting)
            {
                break;
            }
            else
            {
                textAusgabe.text += strComplete[i++];
                yield return new WaitForSeconds(waitForSec);
            }
        }
        textWritten = true;
    }

    IEnumerator AnimateTextbox()
    {
        textFenster.SetActive(true);
        for (float i = 0; i < 1; i += 0.1f)
        {
            textFenster.transform.localScale = new Vector3(1, i, 1);
            yield return new WaitForSeconds(0.001f);
        }
        textFieldPressF.SetActive(true);
        dialogue = dialogue.Replace("\

", "
");
Coroutine animText = StartCoroutine(AnimateText(dialogue));
}
}
So in my game I have a few Trigger which will show a in the inspector given dialogue to the player. The first dialogue is this one:

In the first room you should test the environment to help you out.

You can run with [Shift] and jump with [Space].

And if the player is pressing the F key to skip the “animation” for the scrolling text, the text box shows a text from another trigger later in my game (there are 3 other ones in the hierarchy before this one):

Now you’re ready to test yourself if you can combine all the learned skills from before. Look out for your environment and try to find a way to the top of the room. Sometimes things aren’t what they seem to be.

I just don’t get it why it is happening, I even tested to get the name of the OnTriggerEnter to see if there is another thing entering a trigger but it’s only the player himself and only once.

I hope you guys can help me out with that.

Alright, I found the answer myself. I was digging furthermore threw google and came up with the solution to use two int variables. One is getting inside the Start() the “Index Number” via thisObjInt = int.Parse(gameObject.name.Substring(0, 1); and the other int variable is set when the player is walking into the Trigger with the same Method: checkInt = int.Parse(gameObject.name.Substring(0, 1));(the name of the trigger object where the script sits has to have a integer number on the first place)
Inside my Update the if statement is now this: if (Input.GetKeyDown(KeyCode.F) && !textWritten && thisObjInt == checkInt) same for the else if.
One last thing to mention is that when I pressed the F key the text was skipped immediately and the Textbox was closed again. To fix that I just set the “textWritten” bool after pressing F to skip and after the while loop inside AnimateText I ask if “i” is the same value as “strComplete.Length”. If so textWritten is true.

Here is the whole script now:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextWriting : MonoBehaviour
{
    [SerializeField] string dialogue;
    [SerializeField] Text textAusgabe;
    [SerializeField] GameObject textFenster, textFieldPressF;
    bool visited, textWritten, stopWriting;
    [SerializeField] float waitForSec;
    int thisObjInt, checkInt;

    private void Start()
    {
        thisObjInt = int.Parse(gameObject.name.Substring(0, 1));
    }

    private void Update()
    {
        //Wenn Text Aufbau vorzeitig abgebrochen, dann fülle die Textbox sofort komplett aus
        if (Input.GetKeyDown(KeyCode.F) && !textWritten && thisObjInt == checkInt)
        {
            Debug.Log("Dialog:"+dialogue);
            stopWriting = true;
            textAusgabe.text = "";
            textAusgabe.text = dialogue;
            textWritten = true;
        }
        //Wenn Text fertig geschrieben wurde, schließe das Dialog Fenster
        else if(Input.GetKeyDown(KeyCode.F) && textWritten && thisObjInt == checkInt)
        {
            textFieldPressF.SetActive(false);
            textAusgabe.text = "";
            textFenster.SetActive(false);
            StopAllCoroutines();
            gameObject.SetActive(false);
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject.name);
        checkInt = int.Parse(gameObject.name.Substring(0, 1));
        if (other.CompareTag("Player") && !visited)
        {
            textAusgabe.text = "";
            visited = true;
            textWritten = false;
            stopWriting = false;
            textFenster.transform.localScale = new Vector3(1, 0, 1);
            Coroutine animBox = StartCoroutine(AnimateTextbox());
        }
    }
    
    IEnumerator AnimateText(string strComplete)
    {
        Debug.Log("strComplete: "+strComplete);
        int i = 0;
        textAusgabe.text = "";
        while (i < strComplete.Length)
        {
            if (stopWriting)
            {
                break;
            }
            else
            {
                textAusgabe.text += strComplete[i++];
                yield return new WaitForSeconds(waitForSec);
            }
        }
        if(i == strComplete.Length)
        {
            textWritten = true;
        }
    }

    IEnumerator AnimateTextbox()
    {
        textFenster.SetActive(true);
        for (float i = 0; i < 1; i += 0.1f)
        {
            textFenster.transform.localScale = new Vector3(1, i, 1);
            yield return new WaitForSeconds(0.001f);
        }
        textFieldPressF.SetActive(true);
        dialogue = dialogue.Replace("\

", "
");
Coroutine animText = StartCoroutine(AnimateText(dialogue));
}
}