我需要在Scene.is上应用DontDestroyOnLoad吗?
我需要在进入另一个场景时也不要打扰场景。我发送邮件,当点击发送按钮时它会在邮件服务器中进行身份验证,这时我的场景空闲意味着没有任何回应,直到回到邮件服务器的响应,所以当时我在我的场景中显示一个加载栏。这不是进行处理。整个场景一直挂起,直到来自邮件服务器的响应,那么如何解决这个问题?
void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
答案 0 :(得分:1)
加载新级别scene
时,Unity会破坏前一场景的所有游戏对象。
如果您想保护游戏对象,可以使用该功能。
DontDestroyOnLoad(gameObject);
重要的是要注意,当你说:this.gameObject
你指向几乎相同的事情时,恰好this
直接指向附加到该gameObject的脚本。因此,您不需要this
部分,只需gameObject
即可。
理想情况下,您可以在void Awake()
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)已经发布了一个非常详细的描述,说明了它们是什么以及如何使用它们,我完全推荐。