【发布时间】:2020-12-09 19:00:06
【问题描述】:
在 Unity 中,我有一个脚本,在该脚本中我通过 TCP 连接到一个套接字,并希望每帧都使用这个连接。在那之后我需要处理和清理。我的想法是使用Start() 启动连接并使用OnDestroy()
public class Foo : MonoBehaviour
{
void Start()
{
// start TCP connection
}
void Update()
{
// use connection
}
void OnDestroy()
{
// cleanup
}
}
我需要清理来执行任何发生的事情。无论对象发生什么情况,OnDestroy() 方法是否保证在应用程序停止之前(在独立模式和编辑器中)被调用?如果没有,我如何保证清理?
【问题讨论】:
-
第一句话,很抱歉说的很明显,但总不能保证一定会发生。拔掉电源线主机突然关机怎么办? (如果您想知道是否可能冒着在服务器上的数据库中出现临时无效状态的风险,例如,等待 ondestroy 调用某些东西以恢复良好状态)
-
然后,查看文档:docs.unity3d.com/ScriptReference/MonoBehaviour.OnDestroy.html,似乎
OnDestroy在场景结束时被调用,并且对象是活动。所以非活动对象不会执行它。如果用户_正常_退出应用程序_它应该被调用。但我假设如果发生突然崩溃,或者用户强制终止进程,它不会被调用。 -
@ThomasWeller 这就是为什么我不想每帧都建立和处理连接,只有一次
-
@ThomasWeller 不能通过简单的异步方式发送请求来使用连接,因此不需要等待特定帧更新中的答案?但除此之外,是的,在线游戏通常使用更松散的协议,例如 UDP 而不是 TCP,正是因为它具有更多的反应性,它不需要 ACK 消息。
-
@Pac0 我明白了。那么,您对确保进行此清理有何建议?