C# DontDestroyOnLoad在现场不工作?

C# DontDestroyOnLoad在现场不工作?,c#,unity3d,C#,Unity3d,我需要在现场应用DontDestroyOnLoad。可能吗 当我进入另一个场景时,我也需要不要干扰场景。我正在发送邮件,当点击发送按钮时,它将进入邮件服务器中的身份验证。此时,我的场景空闲意味着在返回邮件服务器的响应之前不响应任何内容,所以在那个时候,我在我的场景中显示了一个加载条。这不是do过程。整个场景一直挂起,直到收到邮件服务器的响应,所以如何解决这个问题 void Awake() { DontDestroyOnLoad(this.gameObject); } 我不完全明

我需要在现场应用DontDestroyOnLoad。可能吗

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

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

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

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


请参见

我建议您使用带有“收益”语句的协同程序 查看的文档,它同样涉及编写代码来处理等待web响应的问题,而无需挂起Unity3d程序


如果您处理的任务需要一到两帧以上的时间,那么协同程序非常强大。已经发布了关于它们是什么以及如何使用它们的详细描述,我完全推荐。

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

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

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

理想情况下,您可以在
void Awake()中保护该游戏对象

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

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


如果是这样的话,那么问题出在
Application.LoadLevel(sceneName)如果你有Unity的免费版本,那么你需要拿出你自己的创造性方式来显示进度条,因为
Application.LoadLevel()
将暂停所有操作,直到它将您带到新场景。

在我的场景中,在收到响应之前,没有任何响应。抱歉,我不明白。您使用的方法是在场景之间移动时使对象保持不变。根据下面的回复,您必须指定游戏对象,因为“this”指的是您正在编写的脚本实例。如果你想让我们的UI在做事情时保持快速响应,你应该查看Unity的线程/异步功能。我也尝试过,但不起作用。如果在调用邮件服务器时发生锁定,我们需要查看该代码。问题似乎与
DontDestroyOnLoad
DontDestroyOnLoad()
是否安全有直接关系,除非您正在保护依赖于另一个确实已被破坏的对象的对象。单击“提交”按钮时,场景将进入挂起状态,因此也不使用协同路由。如果您发布一些实际代码,也许我们可以帮助您使其工作。目前还不清楚你们到底在做什么,也就是说,为什么你们需要在等待邮件服务器的响应时改变场景。顺便说一句
DontDestroyOnLoad(gameObject);
void Awake()
{
   DontDestroyOnLoad(gameObject);
}