[bug反馈]:退出场景偶现 Uncaught TypeError: Cannot read property 'physics_material_update' of null

  • Creator 版本:2.4.3

  • 目标平台: chrome浏览器 / Android

  • 重现方式:退出场景

  • 首个报错:首个报错为 Uncaught TypeError: Cannot read property ‘physics_material_update’ of null

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率: 偶现

断点调试发现是调用 collider内的onDestroy时 this._material 引用计数为0 并且已经销毁,临时处理方案是修改onDestroy 函数为:

cc.Collider3D.prototype.onDestroy = function () {
    if (!CC_EDITOR) {
        if (this._material && this._material.isValid) {
            this._material.off('physics_material_update', this._updateMaterial, this);
        }
        this._shape.onDestroy();
    }
}

代码中并没有操作材质的引用计数,只有切换场景前释放预制件的代码,目前已经调整到切换场景后,不知是否由此引起

我也遇到跟你类似错误的问题,我之前是在onDestroy()回调中取消一些事件,然而当进入onDestroy时,这些节点和组件已经是不在了的

所以我的注册事件如果是节点,或者组件,我都放到这个节点,组件节点的脚本中去取消,但是正常这些事件不需要自己手动取消吧,节点销毁了,这些事件会自己off掉

仔细看帖、我们的问题牛头不对马嘴

你就是释放预制体中材质了,而切换场景切换时,会将当前材质一些事件释放,这不就有两次了吗,你试试 删除预制体节点,并释放资源,再切换场景

主要的是我并没有主动释放物理材质,只在节点回收时释放了引用的预支体,你说的删除节点我也试过,只不过这个是偶现的问题,并且出现几率比较小,短时间出不来

释放预制体资源,也会把预制体中的材质给释放了的

找到问题了,的确是释放顺序的问题,但是之所以偶现是因为资源管理那块有问题,把资源管理的问题改了然后用原先的顺序释放问题就必现了,应该把资源释放放在切换场景后

解决了就好