예제 #1
0
        /// <summary>
        /// Asset sync load from AssetBundle;
        /// </summary>
        /// <typeparam name="T">ctrl</typeparam>
        /// <param name="type">资源类型</param>
        /// <param name="assetName">资源名字</param>
        /// <returns>ctrl</returns>
        public T LoadAssetSync <T>(AssetType type, string assetName) where T : Object
        {
            T ctrl = null;
            IAssetLoader <T> loader      = CreateLoader <T>(type);
            AssetBundle      assetBundle = AssetBundleMgr.Instance.LoadAssetBundleSync(type, assetName);
            bool             isInstance  = false;

            if (assetBundle != null)
            {
                T tempObject = assetBundle.LoadAsset <T>(assetName);
                ctrl = loader.GetAsset(tempObject, out isInstance);
            }
            if (ctrl == null)
            {
                LogUtil.LogUtility.PrintError(string.Format("[ResourceMgr]LoadAssetFromAssetBundleSync Load Asset {0} failure!", assetName + "." + type.ToString()));
            }
            else
            {
                if (isInstance)
                {
                    var go = ctrl as GameObject;
                    if (go)
                    {
                        UnityUtility.AddOrGetComponent <AssetBundleTag>(go, (tag) =>//自动卸载;
                        {
                            tag.AssetBundleName = assetName;
                            tag.Type            = type;
                            tag.IsClone         = false;
                        });
                    }
                }
            }
            return(ctrl);
        }
예제 #2
0
        /// <summary>
        /// Asset async load from AssetBundle;
        /// </summary>
        /// <typeparam name="T">ctrl</typeparam>
        /// <param name="type">资源类型</param>
        /// <param name="assetName">资源名字</param>
        /// <param name="action">资源回调</param>
        /// <param name="progress">progress回调</param>
        /// <returns></returns>
        public IEnumerator <float> LoadAssetAsync <T>(AssetType type, string assetName, Action <T> action, Action <float> progress)
            where T : Object
        {
            T                ctrl        = null;
            AssetBundle      assetBundle = null;
            IAssetLoader <T> loader      = CreateLoader <T>(type);

            IEnumerator itor = AssetBundleMgr.Instance.LoadAssetBundleAsync(type, assetName,
                                                                            ab =>
            {
                assetBundle = ab;
            },
                                                                            null);

            while (itor.MoveNext())
            {
                yield return(Timing.WaitForOneFrame);
            }

            AssetBundleRequest request = assetBundle.LoadAssetAsync <T>(assetName);

            while (request.progress < 0.99)
            {
                if (progress != null)
                {
                    progress(request.progress);
                }
                yield return(Timing.WaitForOneFrame);
            }
            while (!request.isDone)
            {
                yield return(Timing.WaitForOneFrame);
            }
            bool isInstance = false;

            ctrl = loader.GetAsset(request.asset as T, out isInstance);
            if (ctrl == null)
            {
                LogUtil.LogUtility.PrintError(string.Format("[ResourceMgr]LoadAssetFromAssetBundleSync Load Asset {0} failure!", assetName + "." + type.ToString()));
            }
            else
            {
                if (isInstance)
                {
                    var go = ctrl as GameObject;
                    if (go)
                    {
                        UnityUtility.AddOrGetComponent <AssetBundleTag>(go, (tag) =>//自动卸载;
                        {
                            tag.AssetBundleName = assetName;
                            tag.Type            = type;
                            tag.IsClone         = false;
                        });
                    }
                }
                if (action != null)
                {
                    action(ctrl);
                }
            }
        }