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取出来,取出来时修改InstantiateObjectbClear参数是无效的,预加载的对象的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)