U3D Addressables异步加载资源,创建大物体卡顿解决方案

在一款仙侠游戏中,由于SPINE文件数量庞大导致资源创建耗时过长。尝试通过QualitySettings.SetQualityLevel优化效果有限。研究发现Unity的垃圾回收机制和Instantiate的同步创建是卡顿原因。尝试使用Resources.LoadAsync和Addressables.InstantiateAsync并未显著改善。最终,通过在游戏启动时异步预加载大物体并存储,避免了主线程卡顿,虽然会增加内存使用,但在PC端游戏中为快速创建找到了平衡。使用Addressables.InstantiateAsync时,注意设置trackHandle为false,并确保场景加载后的正确管理。
摘要由CSDN通过智能技术生成

     目前做的游戏里,因为是仙侠游戏,特效都是手绘的,需要用到特别多的SPINE文件,一个主角身上可能有上百个动画文件和贴图,创建起来特别特别慢,要四五十秒,试了一下,设置QualitySettings.SetQualityLevel,速度提高也不大,大概20%,那就只能从加载创建本身入手解决了。

首先,测试之前,要先清空U3D缓存。

        Resources.UnloadUnusedAssets();
        System.GC.Collect();

U3D的垃圾回收机制,是这样的,所有的变量,资源,都是先标记,后回收。

标记就是引用计数,当引用计数为0,就标记为未分配状态。

那什么时候回收呢?

1.要分配内存时,内存不够,如果内存用完,会频繁触发GC。

2.写代码强制回收。

3.GC会自动的触发,具体怎么自动触发,没找到资料。

这就是为什么,第一次Resources.Load加载图片后创建物体,再删掉它之后,再次创建会非常快,因为删除,只是标记物体的贴图等资源,引用计数为0,可以回收,但还没到执行GC的时候,所有再次Resources.Load,是直接使用,不会再去读取贴图。

 第一,试了一下Resources.LoadAsync。

        //Resource异步加载
        ResourceRequest prefab = Resources.L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值