コード例 #1
0
        //异步加载
        public void LoadAssetAsync <T>(string assetName, Action <string, T> callback = null) where T : Object
        {
            XDebug.Log(XABConst.Tag, $"--加载AssetObject(异步) {assetName}");
            assetName = assetName.ToLower();
            var bundleName = AssetInfoManager.GetBundleNameByAssetName(assetName);

            if (string.IsNullOrEmpty(bundleName))
            {
                callback?.Invoke(assetName, null);
                return;
            }
            var obj = _GetOrCreateAO(assetName);

            obj.Retain();
            if (obj.State == EnumJobState.Done)
            {
                callback?.Invoke(assetName, obj.GetValue <T>());
                return;
            }
            if (obj.State == EnumJobState.Process)
            {
                obj.AddCallback((p1, p2) =>
                {
                    callback?.Invoke(p1, p2 as T);
                });
                return;
            }
            obj.LoadAsync <T>(this, assetName, (p1, p2) =>
            {
                callback?.Invoke(p1, p2 as T);
            });
        }
コード例 #2
0
        //同步加载
        public T LoadAsset <T>(string assetName) where T : Object
        {
            XDebug.Log(XABConst.Tag, $"--加载AssetObject(同步) {assetName}");
            assetName = assetName.ToLower();
            var bundleName = AssetInfoManager.GetBundleNameByAssetName(assetName);

            if (string.IsNullOrEmpty(bundleName))
            {
                return(null);
            }

            var obj = _GetOrCreateAO(assetName);

            obj.Retain();
            if (obj.State == EnumJobState.Done)
            {
                return(obj.GetValue <T>());
            }
            if (obj.State == EnumJobState.Process)
            {
                //正在执行异步加载,那么停止异步加载,直接同步加载
                obj.StopAsync();
            }
            obj.Load <T>(this, assetName);
            return(obj.GetValue <T>());
        }
コード例 #3
0
        //异步加载
        public void LoadBundleAsync(string bundleName, Action <string, AssetBundle> callback = null)
        {
            XDebug.Log(XABConst.Tag, $"--加载AssetBundle(异步) {bundleName}");
            bundleName = bundleName.ToLower();
            var bundleInfo = AssetInfoManager.GetBundleInfo(bundleName);

            if (bundleInfo == null)
            {
                callback?.Invoke(bundleName, null);
                return;
            }

            var obj = _GetOrCreateAB(bundleName);

            obj.Retain();
            if (obj.State == EnumJobState.Done)
            {
                callback?.Invoke(bundleName, obj.GetValue());
                return;
            }
            if (obj.State == EnumJobState.Process)
            {
                obj.AddCallback(callback);
                return;
            }
            obj.LoadAsync(this, EnumFileLocation.Client, bundleInfo.bundleType, bundleName, callback);
        }
コード例 #4
0
        //同步加载
        public AssetBundle LoadBundle(string bundleName)
        {
            XDebug.Log(XABConst.Tag, $"--加载AssetBundle(同步) {bundleName}");
            bundleName = bundleName.ToLower();
            var bundleInfo = AssetInfoManager.GetBundleInfo(bundleName);

            if (bundleInfo == null)
            {
                return(null);
            }
            var obj = _GetOrCreateAB(bundleName);

            obj.Retain();
            if (obj.State == EnumJobState.Done)
            {
                return(obj.GetValue());
            }
            if (obj.State == EnumJobState.Process)
            {
                //正在执行异步加载,那么停止异步加载,直接同步加载
                obj.StopAsync();
            }
            //这里会通过其他数据获取location类型
            obj.Load(this, EnumFileLocation.Client, bundleInfo.bundleType, bundleName);
            return(obj.GetValue());
        }
コード例 #5
0
        public List <string> GetDependencies(string bundleName)
        {
            var bundleInfo = AssetInfoManager.GetBundleInfo(bundleName);

            if (bundleInfo == null)
            {
                return(null);
            }
            return(bundleInfo.dependencies);
        }
コード例 #6
0
 public string GetBundleNameByAssetName(string assetName)
 {
     return(AssetInfoManager.GetBundleNameByAssetName(assetName));
 }