我在Unity中有我的对象,这个对象有一个析构函数以及Awake
方法
...
private void Awake()
{
Debug.Log("AWAKE");
}
~UnityHumanObject()
{
Debug.Log("DESTRUCTOR");
if (stream != null)
{
stream_release(stream);
}
}
...
当我Run
根据日志单击按钮时,我看到析构函数将打印他的日志消息3次,此后我看到Awake
日志消息...接下来,如果我单击“停止”(再次单击“运行”按钮),则连该析构函数都看不到打个电话
因此,问题是-为什么当我首先单击运行按钮时,我会3次调用析构函数,其次为什么我停止Unity却实际上没有得到析构函数调用?
您可能希望实现一个接收器OnDestroy()
。参见https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDestroy.html
我不了解Unity引擎如何工作的全部内容,但是我可以告诉您,从中衍生的内容UnityEngine.Object
(包括MonoBehaviors)是一种混合类型,一部分是托管代码,一部分是非托管代码。编辑器也是一种神秘的野兽,因为它在编辑场景时会运行场景,但是会限制某些消息/调用,直到您处于“播放”模式(或向ExecuteInEditor属性注册)。
有了这些,如果您要扩展任何Unity类,就很难使用低级构造函数和析构函数来管理代码。简而言之,除非特定于Unity的功能不支持您所需的功能,否则请不要这样做。在您的情况下,使用OnDestroy()
函数关闭流就足够了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句