public ResourceSpawnHandle SpawnAsync(ulong pathHash, int priority) { ResourceSpawnHandle spawnHandle = new ResourceSpawnHandle(); ResourceSpawnRequest request = m_loader.TryGetRequest(pathHash); if (request == null) { request = new ResourceSpawnRequest(pathHash, priority); request.OnLoadDone += _OnRequestDone; m_loader.PushRequst(request); } request.AddSpawnHandle(spawnHandle); return(spawnHandle); }
private void _OnRequestDone(RequestBase <ResourcePool> requestBase) { ResourceSpawnRequest request = requestBase as ResourceSpawnRequest; if (request == null) { Log.Error("[ResourcePoolManager]Invalid request."); return; } ResourcePool resourcePool = request.asset as ResourcePool; if (resourcePool == null) { Log.Error("[ResourcePoolManager]Invalid resource pool."); return; } _AddResourcePool(resourcePool); foreach (var spawnHandle in request.spawnHandleList) { if (!spawnHandle.success) { continue; } int spawnID = spawnHandle.spawnID; if (m_spawnID2PathHash.ContainsKey(spawnID)) { GameObject gameObject = spawnHandle.gameObject; string gameObjectName = gameObject != null ? gameObject.name : "Unknown"; Log.ErrorFormat("[ResourcePoolManager]Duplicated spawn id for gameObject({0})", gameObjectName); if (Application.isPlaying) { GameObject.Destroy(gameObject); } else { GameObject.DestroyImmediate(gameObject); } continue; } m_spawnID2PathHash[spawnID] = resourcePool.Id; } }