using System; using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using Debug = UnityEngine.Debug; using Object = UnityEngine.Object; public class Bundle : MonoBehaviour { #region public static Bundle Instance; public static bool Complete; public static AssetBundle Atlas; public static AssetBundle UI; public static AssetBundle Effect; public static AssetBundle Audio; public static AssetBundle Scene; public static AssetBundle Config; public List UiList; public List AtlasList; public List EffectList; public List AudioList; public List SceneList; public List ConfigList; #endregion public void Awake() { Instance = this; LoadAll ( () => Complete = true ); } public static T Load(string goName, Folder folder) where T : Object { if (Initializer.Instance.DebugMode) { #region MyRegion if (folder == Folder.UI) { for (int i = 0; i < Instance.UiList.Count; i++) { if (Instance.UiList[i].name == goName) { return (T) Instance.UiList[i]; } } } else if (folder == Folder.Audio) { for (int i = 0; i < Instance.AudioList.Count; i++) { if (Instance.AudioList[i].name == goName) { return (T) Instance.AudioList[i]; } } } else if (folder == Folder.Config) { for (int i = 0; i < Instance.ConfigList.Count; i++) { if (Instance.ConfigList[i].name == goName) { return (T) Instance.ConfigList[i]; } } } else if (folder == Folder.Effect) { for (int i = 0; i < Instance.EffectList.Count; i++) { if (Instance.EffectList[i].name == goName) { return (T) Instance.EffectList[i]; } } } else if (folder == Folder.Scene) { for (int i = 0; i < Instance.SceneList.Count; i++) { if (Instance.SceneList[i].name == goName) { return (T) Instance.SceneList[i]; } } } else if (folder == Folder.Atlas) { for (int i = 0; i < Instance.AtlasList.Count; i++) { if (Instance.AtlasList[i].name == goName) { return (T) Instance.AtlasList[i]; } } } #endregion } else { #region MyRegion if (folder == Folder.UI) { return UI.LoadAsset(goName); } else if (folder == Folder.Audio) { return Audio.LoadAsset(goName); } else if (folder == Folder.Config) { return Config.LoadAsset(goName); } else if (folder == Folder.Effect) { return Effect.LoadAsset(goName); } else if (folder == Folder.Scene) { return Scene.LoadAsset(goName); } else if (folder == Folder.Atlas) { return Atlas.LoadAsset(goName); } #endregion } throw new Exception(); } public static AssetBundleRequest LoadAsync(string goName, Folder folder) { if (folder == Folder.UI) { return UI.LoadAssetAsync(goName); } else if (folder == Folder.Audio) { return Audio.LoadAssetAsync(goName); } else if (folder == Folder.Config) { return Config.LoadAssetAsync(goName); } else if (folder == Folder.Effect) { return Effect.LoadAssetAsync(goName); } else if (folder == Folder.Scene) { return Scene.LoadAssetAsync(goName); } else if (folder == Folder.Atlas) { return Atlas.LoadAssetAsync(goName); } else { throw new Exception(); } } public static string GetStreamPath() { if (Application.isEditor) // return "file://" + System.Environment.CurrentDirectory.Replace("\\", "/"); // Use the build output folder directly. return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/";//user local stream else if (Application.isWebPlayer) return System.IO.Path.GetDirectoryName(Application.absoluteURL).Replace("\\", "/") + "/StreamingAssets"; else if (Application.platform == RuntimePlatform.IPhonePlayer) return "file://" + Application.streamingAssetsPath + "/Bundle/IOS/"; else if (Application.isMobilePlatform || Application.isConsolePlatform) return Application.streamingAssetsPath + "/Bundle/Android/"; else // For standalone player. return "file://" + Application.streamingAssetsPath; //return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/"; } public void LoadAll(UnityAction callback) { StartCoroutine(ILoadAll(callback)); } public static IEnumerator ILoadAll(UnityAction callback) { yield return LoadConfig(); ManaReso.AddAsyncLoad("PlayerConfig", Folder.Config, () => { ManaData.PlayerDoc = ManaData.PlayerDoc; }); yield return LoadUI(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("Canvas",1,Folder.UI,ObjType.Canvas); ManaReso.AddAsyncLoad("GroupA", 1, Folder.UI, ObjType.GroupA, true); ManaReso.AddAsyncLoad("GroupB", 1, Folder.UI, ObjType.GroupB, true); ManaReso.AddAsyncLoad("GroupC", 1, Folder.UI, ObjType.GroupC, true); ManaReso.AddAsyncLoad("GroupD", 1, Folder.UI, ObjType.GroupD, true); ManaReso.AddAsyncLoad("EventSystem", 1, Folder.UI, ObjType.EventSystem); ManaReso.AddAsyncLoad("MainCamera", 1, Folder.UI, ObjType.MainCamera); ManaReso.AddAsyncLoad("SkillItem", 31, Folder.UI, ObjType.SkillItem, true); ManaReso.AddAsyncLoad("SignItem", 21, Folder.UI, ObjType.SignItem, true); ManaReso.AddAsyncLoad("FlowerItem", 17, Folder.UI, ObjType.FlowerItem, true); ManaReso.AddAsyncLoad("AchieveItem", 2, Folder.UI, ObjType.AchieveItem, true); } yield return LoadScene(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { //if (ManaData.GetPlayerBool("TutorialA") && ManaData.GetPlayerInt("TutorialIndexA") == 1) //{ // ManaReso.AddAsyncPlayer("PlayerPink"); // ManaReso.AddAsyncPlayer("PlayerBlond"); // ManaReso.AddAsyncPlayer("PlayerBrown"); //} //else //{ // ManaReso.AddAsyncPlayer(ManaData.GetPlayerString("Player")); //} ManaReso.AddAsyncLoad("Flower", 9, Folder.Scene, ObjType.Flower); ManaReso.AddAsyncLoad("Page", 2, Folder.Scene, ObjType.Page); ManaReso.AddAsyncLoad("Garden", 1, Folder.Scene, ObjType.Garden); } yield return LoadAudio(); if (!Logo.Complete && !Initializer.Instance.DebugMode) { ManaReso.AddAsyncLoad("Music", 1, Folder.Audio, ObjType.Music); ManaReso.AddAsyncLoad("skill_config", Folder.Config); ManaReso.AddAsyncLoad("pack_config", Folder.Config); ManaReso.AddAsyncLoad("ability_config", Folder.Config); ManaReso.AddAsyncLoad("achieve_config", Folder.Config); ManaReso.AddAsyncLoad("visit_config", Folder.Config); ManaReso.AddAsyncLoad("award_config", Folder.Config); ManaReso.AddAsyncLoad("flower_config", Folder.Config); ManaReso.AddAsyncLoad("offline_config", Folder.Config); ManaReso.AddAsyncLoad("signin_config", Folder.Config); ManaReso.AddAsyncLoad("English", Folder.Config); ManaReso.AddAsyncLoad("ChineseSimplified", Folder.Config); ManaReso.AddAsyncLoad("ChineseTraditional", Folder.Config); ManaReso.AddAsyncLoad("BtnClip", Folder.Audio); ManaReso.AddAsyncLoad("SkillClip", Folder.Audio); ManaReso.AddAsyncLoad("ErrorClip", Folder.Audio); ManaReso.AddAsyncLoad("DropClip", Folder.Audio); ManaReso.AddAsyncLoad("CloseClip", Folder.Audio); ManaReso.AddAsyncLoad("FlowerClip", Folder.Audio); ManaReso.AddAsyncLoad("BubbleClip", Folder.Audio); ManaReso.AddAsyncLoad("CurrentClip", Folder.Audio); ManaReso.AddAsyncLoad("MiniEndClip", Folder.Audio); ManaReso.AddAsyncLoad("stand_tex", Folder.Config); ManaReso.AddAsyncLoad("stand_ske", Folder.Config); ManaReso.AddAsyncLoad("stand_texture", Folder.Scene); ManaReso.AddAsyncLoad("Closet_tex", Folder.Config); ManaReso.AddAsyncLoad("Closet_ske", Folder.Config); ManaReso.AddAsyncLoad("Closet_texture", Folder.Scene); ManaReso.AddAsyncLoad("4大技能1", Folder.UI); ManaReso.AddAsyncLoad("4大技能2", Folder.UI); ManaReso.AddAsyncLoad("4大技能3", Folder.UI); ManaReso.AddAsyncLoad("4大技能4", Folder.UI); ManaReso.AddAsyncLoad("4大技能1副", Folder.UI); ManaReso.AddAsyncLoad("4大技能2副", Folder.UI); ManaReso.AddAsyncLoad("4大技能3副", Folder.UI); ManaReso.AddAsyncLoad("4大技能4副", Folder.UI); ManaReso.AddAsyncLoad("红-公园", Folder.UI); ManaReso.AddAsyncLoad("红-彩虹", Folder.UI); ManaReso.AddAsyncLoad("红-樱花树", Folder.UI); ManaReso.AddAsyncLoad("红-灌木", Folder.UI); ManaReso.AddAsyncLoad("红-黄莺鸟", Folder.UI); ManaReso.AddAsyncLoad("绿-免费金币", Folder.UI); ManaReso.AddAsyncLoad("绿-繁花似锦", Folder.UI); ManaReso.AddAsyncLoad("绿-金币包1", Folder.UI); ManaReso.AddAsyncLoad("绿-金币包2", Folder.UI); ManaReso.AddAsyncLoad("绿-金币包3", Folder.UI); ManaReso.AddAsyncLoad("蓝-中级包", Folder.UI); ManaReso.AddAsyncLoad("蓝-免费钻", Folder.UI); ManaReso.AddAsyncLoad("蓝-高级包", Folder.UI); ManaReso.AddAsyncLoad("蓝-初级包", Folder.UI); ManaReso.AddAsyncLoad("蓝-中量钻石", Folder.UI); ManaReso.AddAsyncLoad("蓝-大量钻石", Folder.UI); ManaReso.AddAsyncLoad("蓝-小量钻石", Folder.UI); ManaReso.AddAsyncLoad("黄-白蝴蝶", Folder.UI); ManaReso.AddAsyncLoad("黄-紫蝴蝶", Folder.UI); ManaReso.AddAsyncLoad("黄-红蝴蝶", Folder.UI); ManaReso.AddAsyncLoad("黄-蓝蝴蝶", Folder.UI); ManaReso.AddAsyncLoad("黄-黄蝴蝶", Folder.UI); ManaReso.AddAsyncLoad("黄-白色蜜蜂", Folder.UI); ManaReso.AddAsyncLoad("黄-紫色蜜蜂", Folder.UI); ManaReso.AddAsyncLoad("黄-红色蜜蜂", Folder.UI); ManaReso.AddAsyncLoad("黄-蓝色蜜蜂", Folder.UI); ManaReso.AddAsyncLoad("黄-黄色蜜蜂", Folder.UI); for (int i = 1; i < 28; i++) { ManaReso.AddAsyncLoad("Flower" + i, Folder.Scene); } } yield return LoadAtlas(); yield return LoadEffect(); if (callback != null) { callback.Invoke(); } } public static IEnumerator LoadUI() { WWW www = new WWW(GetStreamPath() + "ui"); yield return www; if (string.IsNullOrEmpty(www.error)) { UI = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadAtlas() { WWW www = new WWW(GetStreamPath() + "atlas"); yield return www; if (string.IsNullOrEmpty(www.error)) { Atlas = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadAudio() { WWW www = new WWW(GetStreamPath() + "audio"); yield return www; if (string.IsNullOrEmpty(www.error)) { Audio = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadConfig() { WWW www = new WWW(GetStreamPath() + "config"); yield return www; if (string.IsNullOrEmpty(www.error)) { Config = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadEffect() { WWW www = new WWW(GetStreamPath() + "effect"); yield return www; if (string.IsNullOrEmpty(www.error)) { Effect = www.assetBundle; } else { Debug.Log(www.error); } } public static IEnumerator LoadScene() { WWW www = new WWW(GetStreamPath() + "scene"); yield return www; if (string.IsNullOrEmpty(www.error)) { Scene = www.assetBundle; } else { Debug.Log(www.error); } } }