资源API使用方法
ObjectPoolManager
InstantiateObject
从对象池中同步实例化对象。
public GameObject InstantiateObject(string path,bool setSceneObj = false, bool bClear = true)
path
:对象路径
setSceneObj
:是否在场景设置父物体
bClear
:是否换场景销毁
注意:调用此方法后只有再调用ReleaseObject
方法才能让此对象切换场景销毁
AsyncInstantiateObject
从对象池中异步实例化对象。
public long AsyncInstantiateObject(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool setSceneObj = false, object param1 = null, object param2 = null, object param3 = null, bool bClear = true)
path:对象路径
dealFinish:异步加载回调
priority:加载优先级
setSceneObj:是否在场景设置父物体
param1:回调参数1
param2:回调参数2
param3:回调参数3
bClear:是否换场景销毁
void OnLoadResourceObjFinish(string path, ResourceObj resObj, object param1 = null, object param2 = null, object param3 = null)
注意:异步加载回调的参数就是我们使用这个方法时传入的参数,具体使用可以参看前面的对象池异步加载的内容。
ReleaseObject
回收对象池实例化出来的对象
public void ReleaseObject(GameObject obj, int maxCacheCount = -1, bool destroyCache = false, bool hasRecycleParent = true)
obj:从对象池实例化出来的对象
maxCacheCount:对象池回收最大值,默认无限
destroyCache:是否完全清理资源
hasRecycleParent :是否设定回收的父物体
如果我们对一个对象调用ReleaseObject(obj,0,true)
,那么这个对象就会从内存直接销毁掉(包括对象池内还存在的其他此对象的副本),注意这里的destroy参数和此对象从对象池实例化时的bClear参数没有关系,bClear参数只控制此对象在换场景时会不会被销毁。
bClear参数是如何控制换场景时销毁对象的?
每次更换场景时,我们会调用
ObjectPoolManager.Instance.ClearCache();
和ResourceManager.Instance.ClearCache();
方法,这两个方法是遍历资源的bClear参数和删除对应资源的关键。
PreloadGameObject
public void PreLoadGameObject(string path,int count = 1,bool clear = false)
path:路径
count:预加载个数
clear:跳场景是否清除
预加载的对象,默认跳场景时不清除,使用InstantiateObject
的对象,默认跳场景时清除。
我们预加载的对象,肯定通过InstantiateObject
取出来,取出来时修改InstantiateObject
的bClear
参数是无效的,预加载的对象的bClear
一直是false。如果想要清除预加载的对象,我们调用上面的ReleaseObject(obj,0,true)
即可。
ResourceManager
LoadResource
同步加载资源
public T LoadResource<T>(string path) where T : UnityEngine.Object
使用这个API同步加载资源,如果不调用对应的ReleaseResource
的话,对象是会一直在内存中的。
ReleaseResource
public bool ReleaseResource(Object obj,bool destroyObj = false)
public bool ReleaseResource(string path,bool destroyObj = false)
第二个参数是是否彻底清除对象
PrelaodRes
public void PreLoadRes(string path)
预加载就是先同步加载再卸载,它加载进来的资源会单独设定,让这些资源在跳场景时不清除。
AsyncLoadResource
public void AsyncLoadResource(string path,OnAsyncObjFinish dealFinish,LoadResPriority priority,object param1 = null, object param2 = null, object param3 = null,uint crc = 0)