我希望在第一个代码完成后立即执行特定的代码,而不是像它们当前正在运行的那样同时执行。
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秒,以便有时间播放动画
感谢您的提前帮助。
答案 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,也许还有其他您没有给我们看的东西?如果没有,您也可以删除它!