Я пытаюсь настроить систему диалогов и не могу понять, как заставить ее перестать повторять каждый кадр.
{
[SerializeField] public TMP_Text dialogueText;
[SerializeField] public GameObject dialogueBox;
public stopPlayer stopPlayer;
public GameObject player;
public DialogueObject currentDialogue;
void Start()
{
stopPlayer = player.GetComponent<stopPlayer>();
dialogueBox.SetActive(false);
}
void FixedUpdate()
{
if (stopPlayer.frozen)
{
dialogueBox.SetActive(true);
DisplayDialogue(currentDialogue);
}
}
private IEnumerator MoveThroughDialogue(DialogueObject dialogueObject)
{
for(int i = 0; i < dialogueObject.dialogueLines.Length; i++)
{
dialogueText.text = dialogueObject.dialogueLines[i].dialogue;
//The following line of code makes it so that the for loop is paused until the user clicks the left mouse button.
yield return new WaitUntil(()=>Input.GetMouseButtonDown(0));
//The following line of codes make the coroutine wait for a frame so as the next WaitUntil is not skipped
yield return null;
}
dialogueBox.SetActive(true);
}
public void DisplayDialogue(DialogueObject dialogueObject)
{
StartCoroutine(MoveThroughDialogue(dialogueObject));
}
}
Мне нужен был bool из другого скрипта, но проблема в том, что функция диалога вызывается и повторяется каждый кадр, когда bool активен.
Я не смог найти ответов в Интернете и попытался переместить код, чтобы он соответствовал другому сценарию, но результат был тот же.





Вы звоните DisplayDialogue в FixedUpdate, который работает постоянно. Либо вы устанавливаете stopPlayer.frozen = false; после вызова DisplayDialogue, либо вам следует создать значение флага, чтобы проверить, отображался ли уже диалог.
Не знаю, почему я сам об этом не подумал, спасибо миллиард