我这里必现
赶紧@官方一下 这个bug很严重 直接导致卡死
怎么必现?
遇到过,应该是使用了已经释放的资源导致的
确实是我这边使用了已经释放的资源造成的。
倾向这个问题导致的,大概率是池子中节点的组件引用了已经释放的资源,解决方案应该是两个
- 做好对象重置,然后每次复用重新加载
- 确保用到的资源不被释放(警惕主动 release 和场景的自动释放)
我放入对象池 没有使用自己的其他组件 也没有去销毁 并且用的时候还判断了
从报错看是 SpriteFrame 被销毁了,是不是切换了场景?
没有多场景 小游戏 单场景
放入对象池 有很大概率会出现 现在不放入 就没出现过
我看了一下相关的源码
我们在 commitComp 里面是有做检查和判断的,按理说不应该出现你现在遇到的报错
可以在报错的地发下个断点看看对象状态。你的报错是调用 frame.getGFXTexture() 的时候 frame 是 null
是的 我也看过这里的源码 判断无效 所以说不知道问题在哪里 这是最致命的
这个要调试的,JS 中基础的判断不太可能失效。要不你放一个可以重现的在线链接,我们试一下
又发现一个问题 就是模型在3d场景显示正常 在2dUI有一张贴图不显示 直接是黑色的 一张可以显示 总共有两张贴图
关键是不知道从哪里引起的 也不是必现 调试起来很麻烦
UIMeshRenderer 不支持多个 sub mesh,对于复杂的 3D 物体的渲染可以用独立 Camera 渲染到 RenderTexture 来实现
可以提供 demo,调试技巧其实也不麻烦,多熟悉 Devtools 还是有必要的,很容易定位问题。否则在论坛上别人以及引擎组也很难从简单的描述中推测原因。对社区的支持成本越低,我们的支持也就会越好
之前我在3.3.2遇到的情况是,在bundle场景内预加载的预制体资源引用在释放bundle后没有清理,导致二次使用的时候Prefab.isVaild是true,但是预制体的图片资源全部释放了,再实例化这个预制体使用就会报错
还有就是bundle资源较多,频繁的加载释放也会导致这个问题
我这边是没有使用释放操作 就出现了
不论你是哪个地方用到了这个资源,不释放不会出现这个问题,或者对这个资源执行过decRef