c# - 在 C# Unity3D 项目中添加延迟

标签 c# unity3d

我目前在 Unity 上工作并使用 C# 语言。

到目前为止,我需要做一些事情(在最小的情况下,加载另一个场景)。

我的问题是,如何在我将光标放在该区域上几秒钟后让它发生?

这是我现在的代码。

 if (_newGameButton.Contains (Event.current.mousePosition)) {   
                Application.LoadLevel (1);
                Destroy (this);
            }

我想在 _newGameButton 激活时添加延迟。现在,当我将光标移到 _newGameButton 上时,它会立即加载场景 1。我尝试了很多方法,例如使用 Invoke 和 WaitForSeconds。没有工作。如果错误是我如何使用它,那么正确的方法是什么?非常感谢您的帮助。

编辑:这个问题已经回答,我在 Activate and Deactivate Invoke function 中还有另一个问题.

最佳答案

要在 Unity 中制作定时器和延迟,只需使用 Invoke

void Start()
 {
 Debug.Log("hello from Start.");
 Invoke("Test", 3f);
 }

private void Test()
 {
 Debug.Log("hello from 'Test'");
 }

InvokeRepeating

也非常方便
 Invoke("Test", 5f, 0.5f);

就这么简单。

在你的情况下

if (_newGameButton.Contains (Event.current.mousePosition))
  {
  Invoke("YourSceneName");
  }

private void ChangeScenes()
 {
 UnityEngine.SceneManagement.SceneManager.LoadScene("ScreenMain");
 }

您必须使用场景名称。不要忘记您必须将场景拖到您的场景列表中。查看“Build Settings”“Scenes in Build”。


注意事项

如今,这并不是您在 Unity 中加载场景的真正方式。他们改变了语法。更像是这样……

    UnityEngine.SceneManagement.SceneManager.LoadScene("ScreenMain");

如果要异步加载

AsyncOperation ao;
ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("SceneName");
while (!ao.isDone)
  {
  Debug.Log("loading " +ao.progress.ToString("f2"));
  yield return null;
  }

如果您对场景加载有任何疑问,请单独提出一个新问题。请注意,您几乎肯定不应该执行此“Destroy(this);”。

关于c# - 在 C# Unity3D 项目中添加延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37909924/

相关文章:

c# - 多个进程并行运行时的 Selenium WebDriver 异常

java - ubuntu 14.04 上的 JNI4Net

c# - 公共(public)静态方法+接口(interface)

c# - 在 Entity FrameWork 中获取新生成的 ID(即 scopeIdentity)

unity3d - 在Unity3D中拖拽ScrollRect(ScrollView)

c# - 是否可以在构造函数中更改为不同的构造函数?

unity3d - unity Daydream CalledFromWrongThreadException

c# - 使用游戏引擎 (Unity3D) 进行多线程?

c# - 有什么方法可以阻止光线转换穿过物体吗?

c# - 如何在 Unity 5 上设置 Unity 测试工具