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);
            }
        }
Example #7
0
        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);
            }
        }
Example #8
0
        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);
 }