1

我需要在 Scene 上应用 DontDestroyOnLoad。这可能吗?

我也需要在进入另一个场景时不要打扰场景。这里我正在发送邮件,当点击发送按钮时,它会在邮件服务器中进行身份验证,此时我的场景空闲意味着在返回之前不响应任何内容来自邮件服务器的响应,所以当时我在我的场景中显示了一个加载栏。这不是过程。整个场景都挂起,直到收到邮件服务器的响应,那么如何解决这个问题?

 void  Awake()
{
      DontDestroyOnLoad(this.gameObject);
}
4

3 回答 3

1

加载新关卡时,scene前一场景的所有游戏对象都被 Unity 销毁。

如果要保护游戏对象,可以使用该功能。

DontDestroyOnLoad(gameObject);

重要的是要注意,当您说:this.gameObject您指向几乎相同的东西时,恰好this直接指向附加到该游戏对象的脚本。所以你不需要这个this部分,就可以了gameObject

理想情况下,您可以保护里面的游戏对象void Awake()

void Awake()
{
   DontDestroyOnLoad(gameObject);
}

上面的代码将阻止 Unity 销毁该游戏对象,除非您的游戏完全关闭或稍后您调用Destroy()它。这意味着您可以从一个场景切换到另一个场景,并且游戏对象将继续存在。但是,如果您返回创建您正在保护的游戏对象的场景,如果您没有实施阻止您保护第二个、第三个或许多该游戏对象的逻辑,您可能会遇到问题。

你的第二个问题,如果我理解正确的话:你想在改变场景时发送邮件,但是你的进度条在改变场景时不会进步,它只是静止不动。

如果是这种情况,那么你的问题就出在Application.LoadLevel(sceneName);如果你有免费版的 Unity,那么你需要想出自己的创造性方式来显示进度条,因为Application.LoadLevel()它会停止一切,直到它把你带到新的场景。

于 2013-11-11T13:25:15.910 回答
-1

我不完全明白你在说什么。但是因为在您的上下文中,thisin 很可能代表 a Monobehaviour,请尝试以下操作:

void Awake() {
    DontDestroyOnLoad(this.gameObject);
}

或者

void Awake() {
   DontDestroyOnLoad(gameObject);
}

请参阅http://docs.unity3d.com/Documentation/ScriptReference/Object.DontDestroyOnLoad.html

于 2013-08-20T06:27:56.830 回答
-2

我建议您使用协程,使用 'yield' 语句查看WWW 类的文档,这同样涉及编写代码来处理等待来自网络的响应,而无需挂起您的 Unity3d 程序

如果您正在处理超过一两帧的任务,协程非常强大。Richard Fine (AltDevBlog)发布了关于它们是什么以及如何使用它们的非常详细的描述,我强烈推荐。

于 2013-08-20T21:00:22.700 回答