主要用于加载UI面板等比较小的资源(UI面板最好是同步加载以免显示问题)
示例场景 : Assets/Scripts/Example/AF/1.ResFrame/SyncLoadExample.unity
一.从Resources路径下加载资源
//加载SpritespriteRender.sprite = resLoader.LoadSpriteSync("LocalImageExample/ChangeSetGo",ResFromType.ResourcesRes);//释放SpritespriteRender.sprite = null;resLoader.ReleaseRes("LocalImageExample/ChangeSetGo", true);//如果传false内存不会释放//加载Resource路径下的PrefabsRes.Add(Instantiate(resLoader.LoadSync<GameObject>(ResFromType.ResourcesRes,"ExampleRes/Models/OxygenTank", DestroyCache: true)));//释放DestroyImmediate(Res[Res.Count - 1]);Res.RemoveAt(Res.Count - 1);resLoader.ReleaseRes("ExampleRes/Models/OxygenTank", true);
满足释放内存的条件 :
1.释放资源时destoryObj为true,默认为false
2.此资源的引用计数为0
也就是说你加载此资源实例化了多少次,就需要释放多少次,并且最后一次释放调用destoryObj = true
加载Prefabs还有一中方法InstantiateObjectSync,其好处是不需要手动实例化预制体,也不需要手动销毁,二中加载prefab演示即为此种方式
二.从AB同步加载prefab
这里只测试了本地加载,加载来源配置要设置为streamasset
//从AB包同步加载SpritespriteRender1.sprite = resLoader.LoadSync<Sprite>(ResFromType.ABRes,"Assets/ResForAB/ABMain/Img/Help.png", true, true);//释放SpritespriteRender1.sprite = null;resLoader.ReleaseRes("Assets/ResForAB/ABMain/Img/Help.png", true);//如果传false内存不会释放//从AB同步加载prefab,这里只测试了本地加载,加载来源配置要设置为streamassetObj.Add(resLoader.InstantiateObjectSync(ResFromType.ABRes,"Assets/ResForAB/ABMain/Prefabs/ABLoadTestPre.prefab", UIPar,true));//满足释放的条件 : 1.maxCacheCount为0 2.destoryObj为true 3.引用计数为0resLoader.ReleaseObj(Obj[Obj.Count - 1],0,true);Obj.RemoveAt(Obj.Count - 1);
三.编辑器中加载资源
同一中一样使用resloader释放
spriteRender.sprite = resLoader.LoadSync<Sprite>(ResFromType.EditorRes,"Assets/Scripts/Example/Resources/LocalImageExample/ChangeSetGo.png", true, true);
四.API
LoadSpriteSync :
| assetPath | 加载资源路径, 其他方式都是相对于Asset路径,从Reources加载是相对Resources并且没有后缀名 |
|---|---|
| resType | 加载来源,与assetPath配合,确定资源从哪里进行加载 |
| DestroyCache | 回收时是否销毁内存 |
同名参数不再赘述
LoadSync :
| isSprite | 是否加载Sprite,因为Sprite有自己单独的加载方法 |
|---|---|
InstantiateObjectSync :
| parTrans | 实例化GameObject的父物体 |
|---|---|
| bClear | 同DestroyCache |
