【问题标题】:Game slows down when printing text打印文本时游戏变慢
【发布时间】:2022-01-23 03:38:28
【问题描述】:

我已经在我的项目中实现了来自this Brackeys video 的对话系统。一切正常,但是当我为 android 完成构建时,我发现打印长文本会减慢游戏速度。

代码将要在 UI 中显示的句子分成一个字符数组,然后一个一个地打印每个字符,延迟很小。我一直在做几次测试,首先我认为问题出在打印字符的协同程序上。但是后来我从协程中删除了代码,我发现它打印的字符越多,游戏速度就越慢。

void FixedUpdate()
 {
     if(typeSentence)
     {
         if(t <= 0)
         {
             TypeChar();

             t = charDelay;
         }

         t -= Time.fixedDeltaTime;
     }
 }

 private void TypeChar()
 {
     GUIs[dialogue.UIIndex].dialogueText.text += charSentence[sentenceIndex];

     sentenceIndex++;

     if (sentenceIndex >= charSentence.Length)
     {
         typeSentence = false;
         sentenceIndex = 0;
         GUIs[dialogue.UIIndex].continueButton.SetActive(true);
     }
 }

我不知道是否有更有效的方法可以做到这一点,或者是否有人可以向我解释正在发生的事情以及为什么它减慢了这么多。

【问题讨论】:

    标签: c# string unity3d optimization mobile


    【解决方案1】:

    除了在固定更新中触发 TypeChar() 方法之外,您可以将 TypeChar() 转换为可以处理时间的协程,更有执行力。

     private IEnumerator TypeChar()
     {
         while(sentenceIndex >= charSentence.Length) 
         {
            if(typeSentence)
            {
                GUIs[dialogue.UIIndex].dialogueText.text += charSentence[sentenceIndex];
                sentenceIndex++;
                yield return new WaitForSeconds(charDelay);
            }
         }
         typeSentence = false;
         sentenceIndex = 0;
         GUIs[dialogue.UIIndex].continueButton.SetActive(true); 
     }
    

    而且你可以完全删除 typeSentence 变量,如果你不改变它超出范围。

    而且你可以在 Start 而不是 FixedUpdate 调用它。

    private void Start()
    {
        StartCoroutine(nameof(TypeChar));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      相关资源
      最近更新 更多