如何处理微信小程序大量未捕获的异常

如何处理微信小程序大量未捕获的异常

1)如何处理微信小程序大量未捕获的异常
2)如何关闭代码创建的纹理的读写,或者创建不带读写的图片
3)回收带有贴图和Collider的Mesh,如何正确用对象池维护
4)Cloth组件使用在一个篮筐上,运行后篮网扭曲,是什么原因


这是第408篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:793972859

Script

Q:微信小程序未捕获的异常,无堆栈信息,应该如何处理呢?
https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/DebugAndException.md

A:Unity中所有事件的Try Catch要加全,应该就不会有未捕获异常的代码路径。Unity各事件都要Catch,Unity的代码起点都是事件,起点整个Try包裹,里面被调用的方法不加也行。

此外,C#有个设置未捕捉异常的处理毁掉回调方法,以下一个是未捕获异常统一捕获,一个是Task里面没捕获的:

AppDomain.CurrentDomain.UnhandledException += (_, eargs)
TaskScheduler.UnobservedTaskException += (_, eargs)

感谢jump晃悠@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/672886f8682c7e5cd61bf985


Asset

Q:Unity中自己new出来的Texture2D对象,在内存中看它的大小比实际要多一倍。能理解它需要读写,所以多一倍。游戏中修改完一次后,该图片就会被固定下来不会再被修改。有没有方法可以关闭读写,或者创建不带读写的图片?

A:在代码中创建Texture2D对象时使用如图API:

感谢清泉石上流@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/672885ee682c7e5cd61bf984


Asset

Q:回收带有贴图和Collider的Mesh,怎么正确放到对象池,我看还有说需要把Collider销毁的,需不需要单独回收贴图和Mesh网格呢?需要把贴图单独放到一个池子里么?

A1:对象池,就是你把这个对象的GameObject禁用,然后弄到一个数组里面。下次需要的时候,启用;销毁了就不叫对象池了。

若GameObject禁用,物理也自然无碰撞了;而你的整个对象都已经放进去了,贴图就也被对象池缓存着了。

感谢jump晃悠@UWA问答社区提供了回答

A2:对象池本身是把GO和它引用的一系列资源缓存在场景中;而类似于Collider、Animator这种可能对运行时有开销的组件会随着入池的Deactive操作失活,不会造成开销。

所以构造对象池主要考虑的一般是入池缓存造成的内存开销和不用缓存池维护造成的反复实例化销毁耗时开销的权衡。

针对以上问题,有经验的朋友欢迎转至社区交流:
https://answer.uwa4d.com/question/67288782682c7e5cd61bf986


Physics

Q:Cloth组件使用在一个篮筐上,运行时变成下图这样了,是什么原因?

A:检查一下层级碰撞,只保留和篮球所在层的碰撞,尤其避免Cloth内部碰撞。

针对以上问题,有经验的朋友欢迎转至社区交流:
https://answer.uwa4d.com/question/6728887c3d306f3e9d594d82

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859