如何在unity中通过c#解决协程的打字机效果卡顿的问题?

问题描述 投票:0回答:1

这是一个奇怪的错误。我基本上有一个对话列表,我随机将它们作为字符串传递给协程。字符串被转换为字符数组,字符被添加到 text mesh pro 的文本元素中,一个字符一个字符地添加,它们之间有短暂的延迟。打字机效果的典型方式。无论如何,它大部分时间都可以正常工作,但有时 text mesh pro 中的文本会断断续续。例如,“你好”变成“Heeeelllllooooooo”。我检查了一下,通过协程传递的文本没有问题,只有 text mesh pro 中的文本乱七八糟。所以很明显是协程的问题。知道是什么原因造成的吗?顺便说一句,这是我的协程......

    IEnumerator TypeSentence(string sentence)
    {
        List<char> chararray = sentence.ToCharArray();
        dialoguefinished = false;
        var waitTimer = new WaitForSeconds(0.004f);

        foreach (char letter in chararray)
        {
            if (readingcode==false)    //Normal running
            {
                dialogueTMPtext.text += letter;
                yield return waitTimer; 
            }

        }

        dialoguefinished = true;

     }

我尝试将其作为列表传递,还尝试更改等待时间。但是还是没有解决口吃的问题。奇怪的是口吃只是随机发生的。几乎十分之三。

c# unity3d game-development coroutine unity-editor
1个回答
0
投票

我在评论中与Frenchy想到了同样的事情。

同样,如果先修改一个字符串对象,然后设置为文本组件,则更安全。这应该可以正常工作。 如果您遇到任何错误,请记录“currentText”变量并与我们分享。

IEnumerator TypeSentence(string sentence)
{
    List<char> chararray = sentence.ToCharArray();
    string currentText = "";
    dialoguefinished = false;
    var waitTimer = new WaitForSeconds(0.004f);

    foreach (char letter in chararray)
    {
        if (readingcode == false)
        {
            currentText += letter;
            dialogueTMPtext.text = currentText;
            yield return new WaitForSeconds(0.004f);
        }
    }

    dialoguefinished = true;
}
© www.soinside.com 2019 - 2024. All rights reserved.