主要用于加载UI面板等比较小的资源(UI面板最好是同步加载以免显示问题)
示例场景 : Assets/Scripts/Example/AF/1.ResFrame/SyncLoadExample.unity
一.从Resources路径下加载资源
//加载Sprite
spriteRender.sprite = resLoader.LoadSpriteSync("LocalImageExample/ChangeSetGo",
ResFromType.ResourcesRes);
//释放Sprite
spriteRender.sprite = null;
resLoader.ReleaseRes("LocalImageExample/ChangeSetGo", true);//如果传false内存不会释放
//加载Resource路径下的Prefabs
Res.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包同步加载Sprite
spriteRender1.sprite = resLoader.LoadSync<Sprite>(ResFromType.ABRes,
"Assets/ResForAB/ABMain/Img/Help.png", true, true);
//释放Sprite
spriteRender1.sprite = null;
resLoader.ReleaseRes("Assets/ResForAB/ABMain/Img/Help.png", true);//如果传false内存不会释放
//从AB同步加载prefab,这里只测试了本地加载,加载来源配置要设置为streamasset
Obj.Add(resLoader.InstantiateObjectSync(ResFromType.ABRes,
"Assets/ResForAB/ABMain/Prefabs/ABLoadTestPre.prefab", UIPar,true));
//满足释放的条件 : 1.maxCacheCount为0 2.destoryObj为true 3.引用计数为0
resLoader.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 |