コード例 #1
0
        public bool IsReady(GameItemInfo gameItem)
        {
            Initialize();
            ResourceGameItem item = gameItem as ResourceGameItem;

            if (item != null)
            {
                return(true);
            }
            AssetBundleGameItem assetBundleGameItem = gameItem as AssetBundleGameItem;

            if (assetBundleGameItem != null)
            {
                if (_assetBundles.ContainsKey(assetBundleGameItem.AssetBundle))
                {
                    return(_assetBundles[assetBundleGameItem.AssetBundle].LoadAsset(assetBundleGameItem.ItemName));
                }
                if (!IsAssetBundleDownloaded(assetBundleGameItem.AssetBundle))
                {
                    return(false);
                }
                return(true);
            }
            return(true);
        }
コード例 #2
0
        public override PresentationResult OnInspectorGui(PresentationParamater parameter)
        {
            AssetBundleGameItemPresentationData presentationData =
                parameter.PresentationData as AssetBundleGameItemPresentationData ??
                new AssetBundleGameItemPresentationData();
            Change change = new Change();
            AssetBundleGameItem assetBundleGameItem = parameter.Instance as AssetBundleGameItem ?? new AssetBundleGameItem();

            string[] bundleItems = new[] { "none" }.Concat(AssetDatabase.GetAllAssetBundleNames()).ToArray();
            int      bundleIndex     = AssetDatabase.GetAllAssetBundleNames().IndexOf(s => s == assetBundleGameItem.AssetBundle) + 1;
            int      newIndex        = EditorGUILayout.Popup("Asset bundle", bundleIndex, bundleItems);
            string   assetBundleName = newIndex > 0 ? AssetDatabase.GetAllAssetBundleNames()[newIndex - 1] : string.Empty;

            change.IsDataChanged           |= newIndex != bundleIndex;
            assetBundleGameItem.AssetBundle = assetBundleName;
            if (newIndex > 0)
            {
                string[] assets = AssetDatabase.GetAssetPathsFromAssetBundle(assetBundleName).Select(s => Path.GetFileNameWithoutExtension(s)).ToArray();
                string[] assetItems = new[] { "none" }.Concat(assets).ToArray();
                int      assetIndex    = assets.IndexOf(s => s == assetBundleGameItem.ItemName) + 1;
                int      newAssetIndex = EditorGUILayout.Popup("Asset", assetIndex, assetItems);
                assetBundleGameItem.ItemName = newAssetIndex == 0 ? string.Empty : assets[newAssetIndex - 1];
                change.IsDataChanged        |= assetIndex != newAssetIndex;
            }
            return(new PresentationResult
            {
                Change = change,
                PresentationData = presentationData,
                Result = assetBundleGameItem
            });
        }
コード例 #3
0
        public Object Resolve(GameItemInfo gameItem)
        {
            Initialize();
            ResourceGameItem item = gameItem as ResourceGameItem;

            if (item != null)
            {
                return(Resources.Load(item.Address));
            }
            AssetBundleGameItem assetBundleGameItem = gameItem as AssetBundleGameItem;

            if (assetBundleGameItem != null)
            {
                if (_assetBundles.ContainsKey(assetBundleGameItem.AssetBundle))
                {
                    return(_assetBundles[assetBundleGameItem.AssetBundle].LoadAsset(assetBundleGameItem.ItemName));
                }
                if (!IsAssetBundleDownloaded(assetBundleGameItem.AssetBundle))
                {
                    throw new Exception(string.Format("Asset bundle {0} is not downloaded", assetBundleGameItem.AssetBundle));
                }
                Uri bundleServerAddress             = GetBundleServerAddress(assetBundleGameItem.AssetBundle);
                UnityEngine.AssetBundle assetBundle =
                    UnityEngine.AssetBundle.LoadFromFile(
                        InfoResolver.Resolve <FortInfo>()
                        .ServerConnectionProvider.UserConnection.LoadFromCache(bundleServerAddress));
                _assetBundles[assetBundleGameItem.AssetBundle] = assetBundle;
                return(assetBundle.LoadAsset(assetBundleGameItem.ItemName));
            }
            return((Object)gameItem.GetType().GetProperty("GameItem").GetValue(gameItem, new object[0]));
        }