public static AssetLoadRequestNode Alloc(AbstractAssetLoadRequest request) { var node = ObjectAllocatorHolder <AssetLoadRequestNode> .Allocate(); node.Value = request; return(node); }
private bool TryLoadFromAssetPool(AbstractAssetLoadRequest request) { var assetInfo = request.AssetInfo; Object obj; if (_assetPool.TryGetValue(assetInfo, out obj)) { _logger.DebugFormat("asset found in AssetPool {0} ", assetInfo); TryLoadAsGameObject(obj, assetInfo, request); return(true); } return(false); }
private bool TryLoadAsGameObject(Object obj, AssetInfo assetInfo, AbstractAssetLoadRequest req) { var go = obj as GameObject; if (go != null) { var profiler = SingletonManager.Get <LoadRequestProfileHelp>().GetProfile(assetInfo); profiler.InstantiateTimes++; var hasPosition = req.Option.Position.HasValue; var hasRotation = req.Option.Rotation.HasValue; if (hasPosition || hasRotation) { var position = hasPosition ? req.Option.Position.Value : Vector3.zero; var rotation = hasRotation ? req.Option.Rotation.Value : Quaternion.identity; obj = Object.Instantiate(go, position, rotation, GetGameObjectParent(req)); } else { obj = Object.Instantiate(go, GetGameObjectParent(req), false); } go = obj as GameObject; } var unityObj = new UnityObject(obj, assetInfo); req.LoadedObject = unityObj; if (req.AutoActive) { unityObj.SetActive(true); } if (go != null) { unityObj.WithPostProcessor(req.Option.PostProcessorFactory).OnLoadFromAsset(); if (req.Option.Recyclable) { unityObj.AddUnityObjectReference(); } var profiler = SingletonManager.Get <LoadRequestProfileHelp>().GetProfile(assetInfo); profiler.TotalInstantiateTime += profiler.StopWatch(); return(true); } return(false); }
public IEnumerator Clear() { _logger.InfoFormat("Clear UnityAssetManager: Wait Asset loaded..."); if (!_bundlePool.IsIdle) { yield return(new WaitUntil(() => { UpdateBundlePool(); _logger.InfoFormat("_bundlePool: {0}", _bundlePool.Status()); return _bundlePool.IsIdle; })); } _logger.InfoFormat("Clear UnityAssetManager: Start..."); foreach (var req in _pendingRequests) { AbstractAssetLoadRequest.Free(req); } foreach (var node in _loadingRequests.Values) { var curNode = node; while (curNode != null) { AbstractAssetLoadRequest.Free(curNode.Value); AssetLoadRequestNode.Free(curNode); curNode = curNode.Next; } _loadingRequestCount = 0; } foreach (var req in _loadedRequests) { AbstractAssetLoadRequest.Free(req, true); } _assetPool.Clear(); _loadingScenes.Clear(); _objectPool.Clear(); _bundlePool.Reset(); failed_CallBack_Asset_List.Clear(); _logger.InfoFormat("Clear UnityAssetManager End"); }
private void DisposeOperation(AbstractAssetLoadRequest req) { try { _disposeOperationProfile.BeginProfile(); var loadedObject = req.LoadedObject; if (req.Option.Recyclable) { Recycle(loadedObject); } else { loadedObject.OnDestory(); loadedObject.Destroy(); } } finally { _disposeOperationProfile.EndProfile(); } }
private void UpdateLoadedRequest() { float time = 0; while (_loadedRequests.Count > 0 && ProcessLoadedRequestTime > 0 && time < ProcessLoadedRequestTime) { var req = _loadedRequests.Dequeue(); #if ENABLE_PROFILER var _profile = SingletonManager.Get <DurationHelp>().GetCustomProfileInfo(string.Format( "InvokeOnLoaded_{0}_{1}", req.AssetInfo.BundleName.Replace("/", "_"), req.AssetInfo.AssetName)); #endif try { #if ENABLE_PROFILER _profile.BeginProfile(); #else _loadedProfile.BeginProfile(); #endif req.InvokeOnLoaded(DisposeOperation); } catch (Exception e) { string content = req.AssetInfo.ToString(); failed_CallBack_Asset_List.Add(content + "\n" + e.ToString()); _logger.ErrorFormat("OnLoaded Callback Error: {0},\n{1}", content, e); } finally { #if ENABLE_PROFILER time += _profile.EndProfile(); #else time += _loadedProfile.EndProfile(); #endif } AbstractAssetLoadRequest.Free(req); } }
private void UpdateLoadedRequest() { while (_loadedRequests.Count > 0) { var req = _loadedRequests.Dequeue(); try { _loadedProfile.BeginProfile(); req.InvokeOnLoaded(DisposeOperation); } catch (Exception e) { _logger.Error("OnLoaded Callback Error", e); } finally { _loadedProfile.EndProfile(); } AbstractAssetLoadRequest.Free(req); } }
private bool TryLoadAsGameObject(Object obj, AssetInfo assetInfo, AbstractAssetLoadRequest req) { var go = obj as GameObject; if (go != null) { var profiler = SingletonManager.Get <LoadRequestProfileHelp>().GetProfile(assetInfo); profiler.InstantiateTimes++; obj = Object.Instantiate(go, GetGameObjectParent(req), false); go = obj as GameObject; } var unityObj = new UnityObject(obj, assetInfo); req.LoadedObject = unityObj; if (req.AutoActive) { unityObj.SetActive(true); } if (go != null) { unityObj.WithPostProcessor(req.Option.PostProcessorFactory).OnLoadFromAsset(); if (req.Option.Recyclable) { unityObj.AddUnityObjectReference(); } var profiler = SingletonManager.Get <LoadRequestProfileHelp>().GetProfile(assetInfo); profiler.TotalInstantiateTime += profiler.StopWatch(); return(true); } return(false); }
public static void Free(AbstractAssetLoadRequest request, bool destroyLoadedObj = false) { if (destroyLoadedObj) { var loadedObj = request.LoadedObject; if (loadedObj != null && loadedObj.AsGameObject != null) { Object.Destroy(loadedObj.AsGameObject); } } request.Dispose(); var allocator = request.Allocator; if (allocator == null) { throw new Exception(String.Format("Can not found allocator for load request {0} {1}!", request.RequestType, request.AssetInfo)); } request.Allocator = null; allocator.Free(request); }
private bool IsPendingReuqest(AbstractAssetLoadRequest req) { return(req.RequestType == ELoadRequestType.Asset && _loadingRequests.ContainsKey(req.AssetInfo) && !_assetPool.ContainsKey(req.AssetInfo) || req.RequestType == ELoadRequestType.Scene && _loadingScenes.Count > 0); }
private Transform GetGameObjectParent(AbstractAssetLoadRequest request) { return(request.Parent != null ? request.Parent.transform : UnityObject.DefaultParent); }