Как сделать так, чтобы текст задерживался после вопросительного знака? (Единство)

#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);
    }
}