DontDestroyOnLoad不在场景上工作?

时间:2013-08-20 06:17:31

标签: c# unity3d

我需要在Scene.is上应用DontDestroyOnLoad吗?

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

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

3 个答案:

答案 0 :(得分:1)

加载新级别scene时,Unity会破坏前一场景的所有游戏对象。

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

DontDestroyOnLoad(gameObject);

重要的是要注意,当你说:this.gameObject你指向几乎相同的事情时,恰好this直接指向附加到该gameObject的脚本。因此,您不需要this部分,只需gameObject即可。

理想情况下,您可以在void Awake()

中保护该gameObject
void Awake()
{
   DontDestroyOnLoad(gameObject);
}

上述代码将阻止Unity破坏该gameObject,除非您的游戏完全关闭或稍后在其上调用Destroy()。这意味着您可以在不同场景之间进行更改,游戏对象将继续存在。但是,如果你回到创建你正在保护的gameObject的场景,如果没有实现的逻辑阻止你保护第二,第三或许多游戏对象,你可能会遇到问题。

您的第二个问题,如果我理解正确的话: 您希望在更改场景时发送邮件,但进度条在更改场景时不会进展,它只会停留在那里,静止。

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

答案 1 :(得分:-1)

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

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

void Awake() {
   DontDestroyOnLoad(gameObject);
}

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

答案 2 :(得分:-2)

我建议您使用带有'yield'语句的协同程序 查看WWW class的此文档,该文档同样涉及编写代码以应对等待来自Web的响应,而无需挂起Unity3d程序

如果您正在处理超过一两帧的任务,那么协同程序非常强大。 Richard Fine (AltDevBlog)已经发布了一个非常详细的描述,说明了它们是什么以及如何使用它们,我完全推荐。