在Unity C#中延迟执行'If'语句

时间:2018-12-21 02:59:49

标签: c# unity3d

我希望在第一个代码完成后立即执行特定的代码,而不是像它们当前正在运行的那样同时执行。

private void Update()
{
    //This is the code to be executed first
    if ((textActive == true) && (stopText == false))
    {
        Debug.Log("TextActive");
        KeyText("On");
        objectToEnable4.SetActive(true);
        stopText = true;
    }    

    //after which this code will execute to disable Object4
    if (stopText == true)
    {

        objectToEnable4.SetActive(false);
    }
}

两段代码都能正常工作,我只需要为第二段代码实现延迟 我希望将代码延迟2秒,以便有时间播放动画

感谢您的提前帮助。

3 个答案:

答案 0 :(得分:0)

使用协程的好时机:

private void Update()
{
    //This is the code to be executed first
    if ((textActive == true) && (stopText == false))
    {
        Debug.Log("TextActive");
        KeyText("On");
        objectToEnable4.SetActive(true);
        stopText = true;
        StartCoroutine(myDelay());
    }
}

IEnumerator myDelay()
{
    // waits for two seconds before continuing
    yield return new WaitForSeconds(2f);

    if (stopText == true)
    {
        objectToEnable4.SetActive(false);
    }
}

答案 1 :(得分:0)

根据您提供的代码,我认为他们正在执行您想要的操作:按顺序执行。但是,由于代码非常简单,因此似乎它们正在同时运行,这使您根本看不到objectToEnable4。暂停执行的方法是使用Unity的协同程序。

以下代码是Unity Scritping API上协程的示例:

using UnityEngine;
using System.Collections;

public class WaitForSecondsExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Example());
    }

    IEnumerator Example()
    {
        print(Time.time);
        yield return new WaitForSecondsRealtime(5);
        print(Time.time);
    }
}

第一个答案完美地将corotine应用于了您的代码。希望您觉得有用。

答案 2 :(得分:0)

imo使用Invoke甚至有一种“更好”的方式(至少是更简单的方式)。

private void Update()
{
    if (textActive && !stopText)
    {
        KeyText("On");
        objectToEnable4.SetActive(true);
        stopText = true;
        Invoke("MyDelay", 2);
    }
}

private void MyDelay()
{
    if (stopText) 
    {
        objectToEnable4.SetActive(false);
    }
}

我不确定您为什么还要使用bool stopText,也许还有其他您没有给我们看的东西?如果没有,您也可以删除它!