【问题标题】:StartCoRoutine(string) NOT implementing desired effectStartCoRoutine(string) 没有实现预期的效果
【发布时间】:2018-08-25 10:40:22
【问题描述】:

我对 Coroutine 的确切功能有一点了解,所以我决定用它创建一个项目。最好的学习方式,不是吗?无论如何,我在每个级别的开头都有 UI 工作脚本,它会告诉您什么级别和/或它是否是新的检查点(生成区域)。它还告诉玩家还剩下多少生命值和生命值。我目前的问题是 WaitForSeconds() 不会暂停“检查点”文本,因此它直接进入 GUI 功能并且似乎跳过了检查点(Cpoint() ) 功能。但是,通过调试日志,我知道事实并非如此。更改在启动时发生得如此之快,以至于在读取之前就消失了。

我已将协程注释掉,因为它不间断地运行。我只希望此代码在联系对撞机时起作用。

欢迎所有解释!我是来学习的!另外,如果有人能指出我如何解决这个问题的正确方向,我将不胜感激!

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class txtLvl1 : MonoBehaviour {

// Use this for initialization

public Text checkpointTxt;


void Start () {

}

// Update is called once per frame
void Update () {

    Cpoint();
    StartCoroutine("Wait1");
    GUI();

}

void GUI()
{
    Debug.Log("GUI works");
   // StartCoroutine("Wait1");
    checkpointTxt.fontSize = 12;
    checkpointTxt.text = "Lives = " + HpSc.life + "\nHealth = " + HpSc.HP;


}



IEnumerator Wait() {

    yield return new WaitForSeconds(0.5f);

}

IEnumerator Wait1()
{

    yield return new WaitForSeconds(2);

}

void Cpoint(){

    checkpointTxt.text = "( Checkpoint )";
    checkpointTxt.fontSize = 21;
   // StartCoroutine("Wait1");
    Debug.Log("Cpoint");
    //GUI();

}

【问题讨论】:

标签: c# unity3d


【解决方案1】:

协程从调用者异步运行。当您调用StartCoroutine 时,您的调用函数会启动协程并继续执行。所以当你这样做时

void MyFunction()
{
   Debug.Log("1");
   StartCoroutine(Wait());
   Debug.Log("2");        
}

您的程序将打印1,启动协程,然后打印2,所有这些都在您游戏的同一帧更新中。您的协程将继续执行每个后续帧更新,直到完成,但此时它与MyFunction 完全分开。这是理想的行为,因为想象一下,如果 Unity 等待您的协程结束,然后再继续执行下一行代码。如果这发生在 StartUpdate 方法中,那么现在您的整个游戏都会挂起并等待协程完成,然后才会发生其他任何事情。

如果你想打印一些东西,请稍等,然后打印一些东西并显示一个 GUI,这一切都在协程中完成。

void Start()
{
   StartCoroutine(PrintAndWait());
}

IEnumerator PrintAndWait()
{
   Debug.Log("1");
   yield return new WaitForSeconds(2);
   Debug.Log("2");
   ShowGui();
}

还有一件事;您的协程似乎不间断运行的原因是因为您实际上是在每个更新帧开始一个新的。这不是您想要的,因为您将有几十个协程实例一直在运行。启动协程不会停止任何当前正在运行的协程。

你可以通过在OnCollisionEnter 方法中启动你的协程来完成你想要的。确保按照文档中的说明正确附加 Collider 组件和 RigidBody 组件。

【讨论】:

    猜你喜欢
    • 2014-05-06
    • 2018-06-30
    • 1970-01-01
    • 2012-10-14
    • 2021-01-13
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多