主要用于加载UI面板等比较小的资源(UI面板最好是同步加载以免显示问题)
示例场景 : Assets/Scripts/Example/AF/1.ResFrame/SyncLoadExample.unity
image.png

一.从Resources路径下加载资源

  1. //加载Sprite
  2. spriteRender.sprite = resLoader.LoadSpriteSync("LocalImageExample/ChangeSetGo",
  3. ResFromType.ResourcesRes);
  4. //释放Sprite
  5. spriteRender.sprite = null;
  6. resLoader.ReleaseRes("LocalImageExample/ChangeSetGo", true);//如果传false内存不会释放
  7. //加载Resource路径下的Prefabs
  8. Res.Add(Instantiate(resLoader.LoadSync<GameObject>(ResFromType.ResourcesRes,
  9. "ExampleRes/Models/OxygenTank", DestroyCache: true)));
  10. //释放
  11. DestroyImmediate(Res[Res.Count - 1]);
  12. Res.RemoveAt(Res.Count - 1);
  13. resLoader.ReleaseRes("ExampleRes/Models/OxygenTank", true);

满足释放内存的条件 :
1.释放资源时destoryObj为true,默认为false
2.此资源的引用计数为0
也就是说你加载此资源实例化了多少次,就需要释放多少次,并且最后一次释放调用destoryObj = true

加载Prefabs还有一中方法InstantiateObjectSync,其好处是不需要手动实例化预制体,也不需要手动销毁,二中加载prefab演示即为此种方式

二.从AB同步加载prefab

这里只测试了本地加载,加载来源配置要设置为streamasset

  1. //从AB包同步加载Sprite
  2. spriteRender1.sprite = resLoader.LoadSync<Sprite>(ResFromType.ABRes,
  3. "Assets/ResForAB/ABMain/Img/Help.png", true, true);
  4. //释放Sprite
  5. spriteRender1.sprite = null;
  6. resLoader.ReleaseRes("Assets/ResForAB/ABMain/Img/Help.png", true);//如果传false内存不会释放
  7. //从AB同步加载prefab,这里只测试了本地加载,加载来源配置要设置为streamasset
  8. Obj.Add(resLoader.InstantiateObjectSync(ResFromType.ABRes,
  9. "Assets/ResForAB/ABMain/Prefabs/ABLoadTestPre.prefab", UIPar,true));
  10. //满足释放的条件 : 1.maxCacheCount为0 2.destoryObj为true 3.引用计数为0
  11. resLoader.ReleaseObj(Obj[Obj.Count - 1],0,true);
  12. Obj.RemoveAt(Obj.Count - 1);

三.编辑器中加载资源

同一中一样使用resloader释放

  1. spriteRender.sprite = resLoader.LoadSync<Sprite>(ResFromType.EditorRes,
  2. "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