Пример #1
0
        /// <summary>
        /// Asset async load from AssetBundle;
        /// </summary>
        /// <typeparam name="T">ctrl</typeparam>
        /// <param name="assetType">资源类型</param>
        /// <param name="assetName">资源名字</param>
        /// <param name="proxy">代理</param>
        /// <param name="action">资源回调</param>
        /// <param name="progress">progress回调</param>
        /// <returns></returns>
        private IEnumerator <float> LoadAssetAsync_discard <T>(AssetType assetType, string assetName, AsyncAssetProxy proxy
                                                               , Action <T> action, Action <float> progress)
            where T : Object
        {
            T           ctrl        = null;
            AssetBundle assetBundle = null;

            IEnumerator itor = AssetBundleMgr.Instance.LoadAssetBundleAsync(assetType, assetName,
                                                                            ab => { assetBundle = ab; }, progress);//此处加载占90%;

            while (itor.MoveNext())
            {
                yield return(Timing.WaitForOneFrame);
            }
            var name = Path.GetFileNameWithoutExtension(assetName);
            AssetBundleRequest request = assetBundle.LoadAssetAsync <T>(name);

            //此处加载占10%;
            while (request.progress < 0.99)
            {
                if (progress != null)
                {
                    progress(0.9f + 0.1f * request.progress);
                }
                yield return(Timing.WaitForOneFrame);
            }
            while (!request.isDone)
            {
                yield return(Timing.WaitForOneFrame);
            }
            ctrl = request.asset as T;
            if (null == ctrl)
            {
                LogHelper.PrintError(string.Format("[ResourceMgr]LoadAssetAsync Load Asset failure," +
                                                   ",type:{0},name:{1}!", assetType, assetName));
            }
            //--------------------------------------------------------------------------------------
            //先等一帧;
            yield return(Timing.WaitForOneFrame);

            if (!proxy.IsCancel && action != null)
            {
                action(ctrl);
            }
            if (proxy != null)
            {
                proxy.OnFinish(ctrl);
            }
        }
Пример #2
0
        private void LoadObjectFromAssetBundleLoadNode(AsyncAssetProxy proxy)
        {
            Object      target      = null;
            AssetBundle assetBundle = proxy.LoadNode.assetBundle;

            target = PoolMgr.Instance.GetUnityAsset(proxy.assetType, proxy.assetName);
            if (null == target)
            {
                var name = Path.GetFileNameWithoutExtension(proxy.assetName);
                target = assetBundle.LoadAsset(name);
            }
            if (target != null)
            {
                PoolMgr.Instance.ReleaseUnityAsset(proxy.assetType, proxy.assetName, target);
                target = PoolMgr.Instance.GetUnityAsset(proxy.assetType, proxy.assetName);
            }
            proxy.OnFinish(target);
        }