//回调形式的异步加载方式 public void Get(string name, object param, Action <GameObject, object> onGet, bool checkPreLoading = true) { LinkedList <GameObjectPoolObject> l = m_pools.Get(name); //已经加载过的 if (l != null) { onGet(Get(l).gameObject, param); return; } //正在加载中的 PoolRequests poolReqs = m_requests.Get(name); if (poolReqs != null) { poolReqs.Add(onGet, param); return; } if (checkPreLoading && !s_checkPreLoading) { Debuger.LogError("Get2.没有在预加载期间加载资源 :{0}", name); } //没有加载过的 ResourceRequest resReq = Resources.LoadAsync <GameObject>(name); poolReqs = new PoolRequests(this, name, resReq); m_requests[name] = poolReqs; poolReqs.Add(onGet, param); }
//传统的异步加载方式,可以让StartCoroutine很方便使用 public PoolRequest Get(string name) { LinkedList <GameObjectPoolObject> l = m_pools.Get(name); //已经加载过的 if (l != null) { PoolRequest r = new PoolRequest(name, null); r.Asset = Get(l).gameObject; return(r); } //正在加载中的 PoolRequests poolReqs = m_requests.Get(name); if (poolReqs != null) { return(poolReqs.Add()); } if (!s_checkPreLoading) { Debuger.LogError("Get.没有在预加载期间加载资源 :{0}", name); } //没有加载过的 ResourceRequest resReq = Resources.LoadAsync <GameObject>(name); poolReqs = new PoolRequests(this, name, resReq); m_requests[name] = poolReqs; return(poolReqs.Add()); }