IEnumerator Internal_OnSubtitlesRequestInfo(SubtitlesRequestInfo info) { var text = info.statement.text; var audio = info.statement.audio; var actor = info.actor; subtitlesGroup.gameObject.SetActive(true); actorSpeech.text = ""; actorName.text = actor.name; actorSpeech.color = actor.dialogueColor; actorPortrait.gameObject.SetActive( actor.portraitSprite != null ); actorPortrait.sprite = actor.portraitSprite; if (audio != null){ var actorSource = actor.transform != null? actor.transform.GetComponent<AudioSource>() : null; var playSource = actorSource != null? actorSource : localSource; playSource.clip = audio; playSource.Play(); actorSpeech.text = text; var timer = 0f; while (timer < audio.length){ if (skipOnInput && Input.anyKeyDown){ playSource.Stop(); break; } timer += Time.deltaTime; yield return null; } } if (audio == null){ var tempText = ""; var inputDown = false; if (skipOnInput){ StartCoroutine(CheckInput( ()=>{ inputDown = true; } )); } for (int i= 0; i < text.Length; i++){ if (skipOnInput && inputDown){ actorSpeech.text = text; yield return null; break; } if (subtitlesGroup.gameObject.activeSelf == false){ yield break; } tempText += text[i]; yield return StartCoroutine(DelayPrint(subtitleDelays.characterDelay)); char c = text[i]; if (c == '.' || c == '!' || c == '?'){ yield return StartCoroutine(DelayPrint(subtitleDelays.sentenceDelay)); } if (c == ','){ yield return StartCoroutine(DelayPrint(subtitleDelays.commaDelay)); } actorSpeech.text = tempText; } if (!waitForInput){ yield return StartCoroutine(DelayPrint(subtitleDelays.finalDelay)); } } if (waitForInput){ while(!Input.anyKeyDown){ yield return null; } } yield return null; subtitlesGroup.gameObject.SetActive(false); info.Continue(); }