#c# #text #delay #coroutine #ienumerator
Вопрос:
У меня есть этот текст с эффектом пишущей машинки, и я хочу, чтобы он имел большую задержку после знака вопроса. У меня есть другой код, который работает с запятыми и точками, но это потому, что я его скопировал. Я попытался сделать свой собственный только для вопросительных знаков, чтобы они применяли большую задержку, но, к сожалению, это не работает. Был бы очень признателен за помощь! ( я знаю, что там могут быть некоторые вещи, которые не имеют смысла, но я просто попробовал их )
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Text;
using System;
public class QuestionMarkDelay : MonoBehaviour
{
private char questionMark;
private bool lastCharQuestion;
public float delayAfterQuestion = 1.2f;
private string story;
public Text text;
void Start()
{
questionMark = Convert.ToChar(63);
}
public void ChangeText(string textContent, float delayAfterQuestion = 5f)
{
StopCoroutine(PlayText()); //stop Coroutime if exist
story = textContent;
text.text = ""; //clean text
Invoke("Start_PlayText", delayAfterQuestion); //Invoke effect
}
void Start_PlayText()
{
StartCoroutine(PlayText());
}
IEnumerator PlayText()
{
foreach (char b in story)
{
if (lastCharQuestion)
{
yield return new WaitForSeconds(delayAfterQuestion);
lastCharQuestion = false;
}
if (b == questionMark)
{
lastCharQuestion = true;
}
}
}
}
Редактировать** :
public void ChangeText(string textContent, float delayBetweenChars = 0f)
{
StopCoroutine(PlayText()); //stop Coroutime if exist
story = textContent;
text.text = ""; //clean text
Invoke("Start_PlayText", delayBetweenChars); //Invoke effect
}
Комментарии:
1. Почему
questionMark = Convert.ToChar(63)
?. Почему бы просто не объявитьprivate const char QuestionMark = '?';
2. Код, который я взял, использовал этот метод, поэтому я пошел с ним. Даже не знал, как вот так объявить»?».
3. Если вы используете одинарную кавычку, это
char
строки-разделители с двойными кавычками4. Есть ли какой-то код (не показан), в
PlayText
котором на самом деле отображаются символы? Почему такое усложнениеlastCharQuestion
? Почему бы просто не отложить после того, как вы «сыграете» знак вопроса немедленно?5. @Flydog57 я знаю, что только что поставил ? между двойными кавычками для обозначения знака вопроса.
Ответ №1:
ПРИМЕЧАНИЕ: У вас должна быть одна PlayText
процедура со всеми задержками для всех персонажей.
Попробуй это:
IEnumerator PlayText() {
foreach (char b in story) {
text.text = b;
float charDelay = delayBetweenChars;
switch (b) {
case '?':
charDelay = delayAfterQuestion;
break;
case ',':
charDelay = delayAfterComma;
break;
case '.':
charDelay = delayAfterPeriod;
break;
}
yield return new WaitForSeconds(delayAfterQuestion);
}
}