【Unity报错】Some objects were not cleaned up when closing the scene.

这篇具有很好参考价值的文章主要介绍了【Unity报错】Some objects were not cleaned up when closing the scene.。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

Unity结束运行的时候报错Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)


问题描述

结束运行的时候突然报错,有概率,有时候有有时候没有

some objects were not cleaned up when closing the scene. (did you spawn new,游戏开发学习笔记,unity,游戏引擎


原因分析:

结束运行的时候在OnDestroy中调用了Mono的单例类,但是呢OnDestroy调用次序是不同的,有可能A先B后,也有可能是B先A后。
所以导致单例类先销毁了,然后在某个脚本中的OnDestroy中又调用了该单例类。导致又创建了一次。

注意:在停止运行或者切换场景的时候不要在OnDestroy中生成对象
但是对于自动Mono单例来说切换场景不影响,因为添加了DontDestroyOnLoad

public class MonoBaseManagerAuto<T> : MonoBehaviour where T: MonoBehaviour {
	protected MonoBaseManagerAuto() { }
	private static T _instance = null;
	public static T Instance { 
		get {
			if (_instance == null) {
				//不存在就创建对象
				GameObject obj = new GameObject(typeof(T).Name);
				_instance = obj.AddComponent<T>();
				DontDestroyOnLoad(obj);	//不自动销毁
			}
			return _instance; 
		} 
	}
}

解决方案:

在Mono单例中抽象OnDestroy方法,加一个判断条件

public class MonoBaseManagerAuto<T> : MonoBehaviour where T: MonoBehaviour {
	public static bool applicationIsQuitting = false;
	protected MonoBaseManagerAuto() { }
	private static T _instance = null;
	public static T Instance { 
		get {
			if (_instance == null) {
				if (applicationIsQuitting) {
					//如果销毁了则直接返回,不能再创建
					return _instance;
				}
				//不存在就创建对象
				GameObject obj = new GameObject(typeof(T).Name);
				_instance = obj.AddComponent<T>();
				DontDestroyOnLoad(obj);	//不自动销毁
			}
			return _instance; 
		} 
	}

	protected virtual void OnDestroy() {
		applicationIsQuitting = true;
	}
}

在写代码的时候如果要在OnDestroy中调用单例最好用?来限定文章来源地址https://www.toymoban.com/news/detail-787404.html

	private void OnDestroy() {
        Debug.Log("TestMonoManager:" + TestMonoManager.Instance?.score);
    }

到了这里,关于【Unity报错】Some objects were not cleaned up when closing the scene.的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA报错:[ERROR] Some problems were encountered while processing the POMs

    报错信息:在处理Pom时发生了错误 无法解析父POM:xxx:x.x.x-RELEASE:找不到com.x.x:xxx:POM:x.x.x-RELEASEhttps://repo.maven.apache.org/maven2已缓存在本地存储库中,在经过中心的更新间隔或强制更新并且“parent.relativePath”指向错误的本地POM 点击File-Setting搜索Maven,点入以下页面,查看Maven的路

    2024年02月09日
    浏览(42)
  • unable to access ‘https://github.com/***/‘: HTTP/2 stream 1 was not closed cleanly before end

    错误提示: 错误原因: 当前git的网络协议和github要求的不一致; 解决方法: 执行上面指令后: .gitconfig中添加了http/1.1的协议,再提交试试;

    2024年02月03日
    浏览(42)
  • ❤ error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)

    使用Git的时候今天突然遇到了问题 今天突然使用Mac报错: Git遇到一个问题,如标题 1.搜罗一大堆最终指向这是http2本身的bug。 1.(推荐)直接换掉Git的http版本 git config --global http.version HTTP/1.1 2.更改Git的http克隆为ssh,使用ssh进行提交和拉取代码 — 使用ssh连接Git操作指南(…更新

    2024年02月04日
    浏览(49)
  • 【Unity】URP报错Object reference not set to an instance of an object

    使用URP之后,Unity报错:显示不正常 NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.get_cameraStack () (at Library/PackageCache/com.unity.render-pipelines.universal@10.6.0/Runtime/UniversalAdditionalCameraData.cs:236) URPCameraSetter.Start () (at Assets/Scr

    2024年01月20日
    浏览(45)
  • js关闭当前窗口报错Scripts may close only the windows that were opened by them

    在 Chrome 浏览器中调用 window.close() 关闭当前页面时浏览器控制台报出 Scripts may close only the windows that were opened by them. 且无法关闭当前页面。 先上结论 :不是通过 JS 打开的浏览器标签,都不能通过 window.close() 来关闭当前页面 MDN 对于 window.close() 的解释如下所示: 文章里说,

    2024年01月20日
    浏览(48)
  • rust报错“Utf8Error { valid_up_to: 1, error_len: Some(1) } }”

    这个错误通常表示在尝试将字节序列解码为UTF-8字符时出现问题。它指出在索引1处发现了无效的字节序列,并且错误的长度为1个字节。 要解决这个问题,你可以尝试以下几种方法: 检查你的输入数据是否包含无效的字节序列。你可以使用一些调试工具或打印语句来确定具体

    2024年02月08日
    浏览(31)
  • gitee(码云)git did not exit cleanly (exit code 1)报错解决办法

    git did not exit cleanly (exit code 1) 用之前看是否为此错误 !!! 相信很多小伙伴在使用gitee时都碰到过这个问题,网上的解决办法有的看着很复杂,那么我在这里分享一个简单的办法。 [亲测有效] 一 出现的问题 二 解决办法  1 先把之前clone的本地仓库放进回收站(防止文件找不

    2024年04月26日
    浏览(46)
  • These dependencies were not found:core-js/modules/es.object.to-string.js in ./src/router/index.js

    ERROR Failed to compile with 3 errors These dependencies were not found: * core-js/modules/es.object.to-string.js in ./src/router/index.js * core-js/modules/es.string.iterator.js in ./src/router/index.js * core-js/modules/web.dom-collections.iterator.js in ./src/router/index.js To install them, you can run: npm install --save core-js/modules/es.object.to-str

    2024年02月06日
    浏览(54)
  • git报错The project you were looking for could not be found 解决方式

    一、拉代码报错The project you were looking for could not be found 问题描述: 使用git从远程仓库克隆项目到本地的时候。 出现这个问题:The project you were looking for could not be found. 原因分析: 你的账号没有项目的权限,你可以在浏览器输入你的项目地址,如果可以进入,则说明有权限;

    2024年02月04日
    浏览(68)
  • Mock实现单元测试报错:Argument passed to when( ) is not a mock!

    使用Mock进行单元测试时遇到了该问题:Argument passed to when( ) is not a mock! 首先翻译一下:传递给when( )方法的参数并不是一个Mock对象。 使用Mock时我们主要会用到@InjectMocks、@Mock和@Spy这三个注解,方法则主要是doReturn-when和when-thenReturn两种方式。 其中,@InjectMocks和@Spy创建的是一

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包