Как исправить ошибку в диалоге

Когда я написал диалоги появилась такая проблема. когда я нажимаю space и W или A, то диалог снова открывается даже не находясь в триггере. введите сюда описание изображения `

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

public class DialogMeneger : MonoBehaviour
{
    public Text dialogueText;
    public Text nameText;

    public Animator boxAnim;
    public Animator startAnim;

    private Queue<string> sentences;

    private void Start()
    {

        sentences = new Queue<string>();

    }

    public void StartDialogue(Dialog dialogue)
    { 

        boxAnim.SetBool("boxOpen", true);
        startAnim.SetBool("startOpen", false);

        nameText.text = dialogue.name;
        sentences.Clear();

        foreach(string sentence in dialogue.sentences)
        {
            sentences.Enqueue(sentence);

        }
        DispalyNextsentence();
    }

    public void DispalyNextsentence()
    {
        if(sentences.Count == 0)
        {
            
            EndDialogue();
            return;

        }
        string sentence = sentences.Dequeue();
        StopAllCoroutines();
        StartCoroutine(TypeSentence(sentence));

    }

    IEnumerator TypeSentence(string sentence)
    {
        dialogueText.text = "";
        foreach(char letter in sentence.ToCharArray())
        {
            dialogueText.text += letter;
            yield return null;

        }

    }

    public void EndDialogue()
    {
        boxAnim.SetBool("boxOpen", false);


    }


}

`


Ответы (1 шт):

Автор решения: Olegator36

Я понял, что когда персонаж входит в триггер, появляется возможность активации диалога.

Наверняка вы использовали метод OnTriggerEnter2D, но не предусмотрели выход из триггера методом OnTriggerExit2D.

Поэтому можно сказать, что проблема в другом скрипте, который активирует диалог.

Просто добавьте в него OnTriggerExit2D, в котором будет изменена переменная.

private bool dialogReady;
private void Update()
{
    if(Input.GetKeyDown(KeyCode.Space) && dialogReady)
    {
        НачатьДиалог();
    }
}
private void OnTriggerEnter2D(Collider2D other)
{
    dialogReady = true;
}
private void OnTriggerExit2D(Collider2D other)
{
    dialogReady = false;
}

Примерно так должен выглядеть кусок кода.

→ Ссылка