Bundle.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Events;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.IO;
  8. using System.Xml;
  9. using assetBundleUtility;
  10. using DragonBones;
  11. #if UNITY_EDITOR
  12. using UnityEditor;
  13. #endif
  14. using Debug = UnityEngine.Debug;
  15. using Object = UnityEngine.Object;
  16. public class Bundle : MonoBehaviour
  17. {
  18. #region
  19. public static bool UpdateComplete;
  20. public static AssetBundle NewDressConfig;
  21. public static AssetBundle NewDressSke;
  22. public static AssetBundle NewDressTex;
  23. public static AssetBundle NewLanguage;
  24. public static AssetBundle NewFlowerConfig;
  25. public static AssetBundle NewFlowerTex;
  26. public static List<XmlAttributeCollection> NewDressroomConfigs = new List<XmlAttributeCollection>();
  27. public static List<XmlAttributeCollection> NewFlowerConfigs = new List<XmlAttributeCollection>();
  28. public static Bundle Instance;
  29. public static bool Complete;
  30. public static AssetBundle Atlas;
  31. public static AssetBundle Atlas2;
  32. public static AssetBundle UI;
  33. public static AssetBundle Effect;
  34. public static AssetBundle Audio;
  35. public static AssetBundle Scene;
  36. public static AssetBundle Config;
  37. public static AssetBundle Discard;
  38. public static AssetBundle PlazaRoom;
  39. public Texture2D AtlasTexture;
  40. public Texture2D ExpressionTexture;
  41. public List<Object> UiList;
  42. public List<Object> AtlasList;
  43. public List<Sprite> Atlas2List;
  44. public List<Object> EffectList;
  45. public List<Object> AudioList;
  46. public List<Object> SceneList;
  47. public List<Object> ConfigList;
  48. public List<Object> DiscardList;
  49. public List<Object> PlazaRoomList;
  50. public List<Object> DressList;
  51. #endregion
  52. public void Awake()
  53. {
  54. Instance = this;
  55. LoadAll
  56. (
  57. () => Complete = true
  58. );
  59. }
  60. public static T Load<T>(string goName, Folder folder) where T : Object
  61. {
  62. if (Initializer.Instance.DebugMode)
  63. {
  64. #region MyRegion
  65. if (folder == Folder.UI)
  66. {
  67. for (int i = 0; i < Instance.UiList.Count; i++)
  68. {
  69. if (Instance.UiList[i].name == goName)
  70. {
  71. return (T) Instance.UiList[i];
  72. }
  73. }
  74. }
  75. else if (folder == Folder.Audio)
  76. {
  77. for (int i = 0; i < Instance.AudioList.Count; i++)
  78. {
  79. if (Instance.AudioList[i].name == goName)
  80. {
  81. return (T) Instance.AudioList[i];
  82. }
  83. }
  84. }
  85. else if (folder == Folder.Config)
  86. {
  87. for (int i = 0; i < Instance.ConfigList.Count; i++)
  88. {
  89. if (Instance.ConfigList[i].name == goName)
  90. {
  91. return (T) Instance.ConfigList[i];
  92. }
  93. }
  94. }
  95. else if (folder == Folder.Effect)
  96. {
  97. for (int i = 0; i < Instance.EffectList.Count; i++)
  98. {
  99. if (Instance.EffectList[i].name == goName)
  100. {
  101. return (T) Instance.EffectList[i];
  102. }
  103. }
  104. }
  105. else if (folder == Folder.Scene)
  106. {
  107. if (goName == "Expression")
  108. {
  109. return (T)(Object)Sprite.Create(Instance.ExpressionTexture, new Rect(0, 0, Instance.AtlasTexture.width, Instance.AtlasTexture.height), new Vector2(0.5f, 0.5f));
  110. }
  111. for (int i = 0; i < Instance.SceneList.Count; i++)
  112. {
  113. if (Instance.SceneList[i].name == goName)
  114. {
  115. return (T) Instance.SceneList[i];
  116. }
  117. }
  118. }
  119. else if (folder == Folder.Discard)
  120. {
  121. for (int i = 0; i < Instance.DiscardList.Count; i++)
  122. {
  123. if (Instance.DiscardList[i].name == goName)
  124. {
  125. return (T)Instance.DiscardList[i];
  126. }
  127. }
  128. }
  129. else if (folder == Folder.Atlas)
  130. {
  131. if (goName == "Atlas")
  132. {
  133. return (T) (Object) Sprite.Create(Instance.AtlasTexture, new Rect(0, 0, Instance.AtlasTexture.width, Instance.AtlasTexture.height), new Vector2(0.5f, 0.5f));
  134. }
  135. for (int i = 0; i < Instance.AtlasList.Count; i++)
  136. {
  137. if (Instance.AtlasList[i].name == goName)
  138. {
  139. return (T)Instance.AtlasList[i];
  140. }
  141. }
  142. }
  143. else if (folder == Folder.PlazaRoom)
  144. {
  145. for (int i = 0; i < Instance.PlazaRoomList.Count; i++)
  146. {
  147. if (Instance.PlazaRoomList[i].name == goName)
  148. {
  149. return (T)Instance.PlazaRoomList[i];
  150. }
  151. }
  152. }
  153. //else if (folder == Folder.Dress)
  154. //{
  155. // for (int i = 0; i < Instance.DressList.Count; i++)
  156. // {
  157. // if (Instance.DressList[i].name == goName)
  158. // {
  159. // return (T)Instance.DressList[i];
  160. // }
  161. // }
  162. //}
  163. #endregion
  164. }
  165. else
  166. {
  167. #region MyRegion
  168. if (folder == Folder.UI)
  169. {
  170. return UI.LoadAsset<T>(goName);
  171. }
  172. else if (folder == Folder.Audio)
  173. {
  174. return Audio.LoadAsset<T>(goName);
  175. }
  176. else if (folder == Folder.Config)
  177. {
  178. return Config.LoadAsset<T>(goName);
  179. }
  180. else if (folder == Folder.Effect)
  181. {
  182. return Effect.LoadAsset<T>(goName);
  183. }
  184. else if (folder == Folder.Scene)
  185. {
  186. return Scene.LoadAsset<T>(goName);
  187. }
  188. else if (folder == Folder.Atlas)
  189. {
  190. return Atlas.LoadAsset<T>(goName);
  191. }
  192. else if (folder == Folder.Atlas2)
  193. {
  194. return Atlas2.LoadAsset<T>(goName);
  195. }
  196. else if (folder == Folder.Discard)
  197. {
  198. return Discard.LoadAsset<T>(goName);
  199. }
  200. else if (folder == Folder.PlazaRoom)
  201. {
  202. return PlazaRoom.LoadAsset<T>(goName);
  203. }
  204. #endregion
  205. }
  206. DebugManager.Log(goName + " " + folder);
  207. throw new Exception(goName + " " + folder);
  208. }
  209. public static void LoadAtlasSprites()
  210. {
  211. if (Initializer.Instance.DebugMode)
  212. {
  213. for (int i = 0; i < Instance.Atlas2List.Count; i++)
  214. {
  215. ResourceManager.ObjectDictionary.UniqueAdd(Instance.Atlas2List[i].name, Instance.Atlas2List[i]);
  216. }
  217. #if UNITY_EDITOR
  218. string assetPath = AssetDatabase.GetAssetPath(ResourceManager.Load<Texture2D>("stand_texture", Folder.Scene));
  219. Object[] objects = AssetDatabase.LoadAllAssetsAtPath(assetPath);
  220. for (int i = 0; i < objects.Length; i++)
  221. {
  222. Sprite sprite = objects[i] as Sprite;
  223. if (sprite != null)
  224. {
  225. PlayerManager.CloseSpriteDictionary.Add(sprite.name, sprite);
  226. ResourceManager.ObjectDictionary.UniqueAdd(sprite.name, sprite);
  227. }
  228. }
  229. #endif
  230. }
  231. else
  232. {
  233. #region MyRegion
  234. Sprite[] sprites = Atlas2.LoadAllAssets<Sprite>();
  235. for (int i = 0; i < sprites.Length; i++)
  236. {
  237. ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  238. }
  239. sprites = Atlas.LoadAllAssets<Sprite>();
  240. for (int i = 0; i < sprites.Length; i++)
  241. {
  242. ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  243. }
  244. sprites = Scene.LoadAssetWithSubAssets<Sprite>("FlowerItemAtlas1");
  245. for (int i = 0; i < sprites.Length; i++)
  246. {
  247. ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  248. }
  249. Object[] objects = Scene.LoadAssetWithSubAssets("stand_texture", typeof(Sprite));
  250. for (int i = 0; i < objects.Length; i++)
  251. {
  252. Sprite sprite = (Sprite)objects[i];
  253. PlayerManager.CloseSpriteDictionary.Add(sprite.name, sprite);
  254. ResourceManager.SpriteDictionary.UniqueAdd(sprite.name, sprite);
  255. }
  256. #endregion
  257. }
  258. }
  259. //public static void LoadAllDressBundleAssetsIntoDragonbone()
  260. //{
  261. // UnityFactory.factory.LoadDragonBonesData(ResourceManager.Load<TextAsset>(DressLabel.Dress_ske, Folder.Dress));
  262. // foreach (var dressName in DressLabel.dressNames)
  263. // {
  264. // ResourceManager.Load<Texture2D>(dressName, Folder.Dress);
  265. // UnityFactory.factory.LoadTextureAtlasData(ResourceManager.Load<TextAsset>(dressName + "_tex", Folder.Dress), dressName);
  266. // }
  267. // Sprite[] sprites = Dress.LoadAllAssets<Sprite>();
  268. // if (Initializer.Instance.DebugMode)
  269. // {
  270. // for (int i = 0; i < Instance.DressList.Count; i++)
  271. // {
  272. // Sprite sprite = Instance.DressList[i] as Sprite;
  273. // if (sprite != null)
  274. // {
  275. // PlayerManager.CloseSpriteDictionary.Add(sprite.name, sprite);
  276. // ResourceManager.ObjectDictionary.UniqueAdd(sprite.name, sprite);
  277. // }
  278. // }
  279. // }
  280. // else
  281. // {
  282. // for (int i = 0; i < sprites.Length; i++)
  283. // {
  284. // PlayerManager.CloseSpriteDictionary.Add(sprites[i].name, sprites[i]);
  285. // ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  286. // }
  287. // }
  288. //}
  289. public static AssetBundleRequest LoadAsync<T>(string goName, Folder folder)
  290. {
  291. if (folder == Folder.UI)
  292. {
  293. return UI.LoadAssetAsync<T>(goName);
  294. }
  295. else if (folder == Folder.Audio)
  296. {
  297. return Audio.LoadAssetAsync<T>(goName);
  298. }
  299. else if (folder == Folder.Config)
  300. {
  301. return Config.LoadAssetAsync<T>(goName);
  302. }
  303. else if (folder == Folder.Effect)
  304. {
  305. return Effect.LoadAssetAsync<T>(goName);
  306. }
  307. else if (folder == Folder.Scene)
  308. {
  309. return Scene.LoadAssetAsync<T>(goName);
  310. }
  311. else if (folder == Folder.Atlas)
  312. {
  313. return Atlas.LoadAssetAsync<T>(goName);
  314. }
  315. else if (folder == Folder.Discard)
  316. {
  317. return Discard.LoadAssetAsync<T>(goName);
  318. }
  319. else
  320. {
  321. throw new Exception();
  322. }
  323. }
  324. public static AssetBundleRequest LoadAllAsync<T>(Folder folder)
  325. {
  326. if (folder == Folder.Atlas2)
  327. {
  328. return Atlas2.LoadAllAssetsAsync<T>();
  329. }
  330. else
  331. {
  332. throw new Exception();
  333. }
  334. }
  335. public static string GetStreamPath()
  336. {
  337. if (Application.isEditor)
  338. // return "file://" + System.Environment.CurrentDirectory.Replace("\\", "/"); // Use the build output folder directly.
  339. return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/";//user local stream
  340. else if (Application.isWebPlayer)
  341. return System.IO.Path.GetDirectoryName(Application.absoluteURL).Replace("\\", "/") + "/StreamingAssets";
  342. else if (Application.platform == RuntimePlatform.IPhonePlayer)
  343. return "file://" + Application.streamingAssetsPath + "/Bundle/IOS/";
  344. else if (Application.isMobilePlatform || Application.isConsolePlatform)
  345. return Application.streamingAssetsPath + "/Bundle/Android/";
  346. else // For standalone player.
  347. return "file://" + Application.streamingAssetsPath;
  348. //return "file://" + Application.streamingAssetsPath + "/Bundle/Windows/";
  349. }
  350. public void LoadAll(UnityAction callback)
  351. {
  352. StartCoroutine(ILoadAll(callback));
  353. }
  354. public static IEnumerator ILoadAll(UnityAction callback)
  355. {
  356. yield return LoadConfig();
  357. if (!Logo.Complete && !Initializer.Instance.DebugMode)
  358. {
  359. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.PlayerConfig, Folder.Config, () => { ConfigManager.ConfigDocument = ConfigManager.ConfigDocument; HttpManager.GetBuyPackLimitFlag(); });
  360. }
  361. else
  362. {
  363. ConfigManager.ConfigDocument = ConfigManager.ConfigDocument;
  364. HttpManager.GetBuyPackLimitFlag();
  365. }
  366. //yield return LoadDiscard();
  367. yield return LoadUI();
  368. if (!Logo.Complete && !Initializer.Instance.DebugMode)
  369. {
  370. ResourceManager.AddAsyncLoad(ResourceLabel.Canvas, 1, Folder.UI, ObjType.Canvas);
  371. //ResourceManager.AddAsyncLoad(ResourceLabel.GroupA, 1, Folder.UI, ObjType.GroupA, true);
  372. //ResourceManager.AddAsyncLoad(ResourceLabel.GroupB, 1, Folder.UI, ObjType.GroupB, true);
  373. //ResourceManager.AddAsyncLoad(ResourceLabel.GroupC, 1, Folder.UI, ObjType.GroupC, true);
  374. //ResourceManager.AddAsyncLoad(ResourceLabel.GroupE, 1, Folder.UI, ObjType.GroupE, true);
  375. //ResourceManager.AddAsyncLoad(ResourceLabel.GroupD, 1, Folder.UI, ObjType.GroupD, true);
  376. ResourceManager.AddAsyncLoad(ResourceLabel.EventSystem, 1, Folder.UI, ObjType.EventSystem);
  377. ResourceManager.AddAsyncLoad(ResourceLabel.MainCamera, 1, Folder.UI, ObjType.MainCamera);
  378. //ResourceManager.AddAsyncLoad("SkillItem", 31, Folder.UI, ObjType.SkillItem, true);
  379. //ResourceManager.AddAsyncLoad("SignItem", 21, Folder.UI, ObjType.SignItem, true);
  380. //ResourceManager.AddAsyncLoad("FlowerItem", 17, Folder.UI, ObjType.FlowerItem, true);
  381. //ResourceManager.AddAsyncLoad("AchieveItem", 2, Folder.UI, ObjType.AchieveItem, true);
  382. }
  383. yield return LoadScene();
  384. if (!Logo.Complete && !Initializer.Instance.DebugMode)
  385. {
  386. ResourceManager.AddAsyncLoad(ResourceLabel.Flower, 9, Folder.Scene, ObjType.Flower);
  387. ResourceManager.AddAsyncLoad(ResourceLabel.Page, 2, Folder.Scene, ObjType.SlotPage);
  388. ResourceManager.AddAsyncLoad(ResourceLabel.Garden, 1, Folder.Scene, ObjType.Garden);
  389. ResourceManager.AddAsyncLoad(ResourceLabel.DressRoom, 1, Folder.UI, ObjType.DressRoom);
  390. }
  391. yield return LoadAudio();
  392. if (!Logo.Complete && !Initializer.Instance.DebugMode)
  393. {
  394. ResourceManager.AddAsyncLoad(ResourceLabel.Music, 1, Folder.Audio, ObjType.Music);
  395. }
  396. yield return LoadAtlas2();
  397. if (!Logo.Complete && !Initializer.Instance.DebugMode)
  398. {
  399. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.SkillConfig, Folder.Config);
  400. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.PackConfig, Folder.Config);
  401. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.AbilityConfig, Folder.Config);
  402. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.AchieveConfig, Folder.Config);
  403. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.VisitConfig, Folder.Config);
  404. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.AwardConfig, Folder.Config);
  405. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.FlowerConfig, Folder.Config);
  406. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.OfflineConfig, Folder.Config);
  407. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.SigninConfig, Folder.Config);
  408. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.DressroomConfig, Folder.Config);
  409. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.English, Folder.Config);
  410. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.ChineseSimplified, Folder.Config);
  411. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.ChineseTraditional, Folder.Config);
  412. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.BtnClip, Folder.Audio);
  413. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.SkillClip, Folder.Audio);
  414. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.ErrorClip, Folder.Audio);
  415. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.DropClip, Folder.Audio);
  416. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.CloseClip, Folder.Audio);
  417. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.FlowerClip, Folder.Audio);
  418. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.BubbleClip, Folder.Audio);
  419. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.CurrentClip, Folder.Audio);
  420. ResourceManager.AddAsyncLoad<AudioClip>(ResourceLabel.MiniEndClip, Folder.Audio);
  421. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.StandTex, Folder.Config);
  422. ResourceManager.AddAsyncLoad<TextAsset>(ResourceLabel.StandSke, Folder.Config);
  423. ResourceManager.AddAsyncLoad<Texture2D>(ResourceLabel.StandTexture, Folder.Scene);
  424. }
  425. yield return LoadAtlas();
  426. yield return LoadEffect();
  427. SpriteAsset.AddAllBundleSpriteInfo();
  428. if (callback != null)
  429. {
  430. callback.Invoke();
  431. }
  432. }
  433. public static IEnumerator LoadUI()
  434. {
  435. WWW www = new WWW(GetStreamPath() + "ui");
  436. yield return www;
  437. if (string.IsNullOrEmpty(www.error))
  438. {
  439. UI = www.assetBundle;
  440. }
  441. else
  442. {
  443. Debug.Log(www.error);
  444. }
  445. }
  446. public static IEnumerator LoadAtlas()
  447. {
  448. WWW www = new WWW(GetStreamPath() + "atlas");
  449. yield return www;
  450. if (string.IsNullOrEmpty(www.error))
  451. {
  452. Atlas = www.assetBundle;
  453. }
  454. else
  455. {
  456. Debug.Log(www.error);
  457. }
  458. }
  459. public static IEnumerator LoadAtlas2()
  460. {
  461. WWW www = new WWW(GetStreamPath() + "atlas2");
  462. yield return www;
  463. if (string.IsNullOrEmpty(www.error))
  464. {
  465. Atlas2 = www.assetBundle;
  466. }
  467. else
  468. {
  469. Debug.Log(www.error);
  470. }
  471. }
  472. public static IEnumerator LoadAudio()
  473. {
  474. WWW www = new WWW(GetStreamPath() + "audio");
  475. yield return www;
  476. if (string.IsNullOrEmpty(www.error))
  477. {
  478. Audio = www.assetBundle;
  479. }
  480. else
  481. {
  482. Debug.Log(www.error);
  483. }
  484. }
  485. public static IEnumerator LoadConfig()
  486. {
  487. WWW www = new WWW(GetStreamPath() + "config");
  488. yield return www;
  489. if (string.IsNullOrEmpty(www.error))
  490. {
  491. Config = www.assetBundle;
  492. }
  493. else
  494. {
  495. Debug.Log(www.error);
  496. }
  497. }
  498. public static IEnumerator LoadEffect()
  499. {
  500. WWW www = new WWW(GetStreamPath() + "effect");
  501. yield return www;
  502. if (string.IsNullOrEmpty(www.error))
  503. {
  504. Effect = www.assetBundle;
  505. }
  506. else
  507. {
  508. Debug.Log(www.error);
  509. }
  510. }
  511. public static IEnumerator LoadScene()
  512. {
  513. WWW www = new WWW(GetStreamPath() + "scene");
  514. yield return www;
  515. if (string.IsNullOrEmpty(www.error))
  516. {
  517. Scene = www.assetBundle;
  518. }
  519. else
  520. {
  521. Debug.Log(www.error);
  522. }
  523. }
  524. public static IEnumerator LoadDiscard()
  525. {
  526. WWW www = new WWW(GetStreamPath() + "discard");
  527. yield return www;
  528. if (string.IsNullOrEmpty(www.error))
  529. {
  530. Discard = www.assetBundle;
  531. }
  532. else
  533. {
  534. Debug.Log(www.error);
  535. }
  536. }
  537. public static IEnumerator LoadPlazaRoom()
  538. {
  539. WWW www = new WWW(GetStreamPath() + "plazaroom");
  540. yield return www;
  541. if (string.IsNullOrEmpty(www.error))
  542. {
  543. PlazaRoom = www.assetBundle;
  544. }
  545. else
  546. {
  547. Debug.Log(www.error);
  548. }
  549. }
  550. public static void UpdateAssetBundle()
  551. {
  552. string persistentFolder = $"{Application.persistentDataPath}{Path.DirectorySeparatorChar}HotUpdate";
  553. string streamingFolder = $"{Application.streamingAssetsPath}{Path.DirectorySeparatorChar}Bundle{Path.DirectorySeparatorChar}Windows{Path.DirectorySeparatorChar}HotUpdate";
  554. List<AssetBundleSet> assetBundleSets = AssetBundleUtility.GetAssetBundleSetsFromFolders
  555. (
  556. persistentFolder,
  557. streamingFolder
  558. );
  559. string localMD5 = AssetBundleUtility.GetMD5OfAssetBundleSets(assetBundleSets);
  560. string serverMD5 = "AE29F7EE00843A792D96CA02D6907FAA";
  561. //bool needUpdate = localMD5 != serverMD5;
  562. bool needUpdate = false;
  563. Debug.LogWarning($"NeedUpdate : {needUpdate}");
  564. if (needUpdate)
  565. {
  566. AssetBundleUtility.UpdateAllAssetBundle
  567. (
  568. "new_dress_config|F1F0FA4EB0C70A658BB03E935738C422|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_dress_config\r\nnew_dress_ske|531AE05FA301BBAD7B58B532BCD04CFD|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_dress_ske\r\nnew_dress_tex|3060DC78E5C9A8D58CF440C6C66035C4|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_dress_tex\r\nnew_flower_config|0CD417F29E1C7580A742BFC33DAE7DF5|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_flower_config\r\nnew_flower_tex|8640D886CB7D71B5D5EBA8D0FF037573|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_flower_tex\r\nnew_language_config|D7683A0A8867FBC6D32CFF5C9F41BAC4|file://E:\\UnityProject\\Garden5\\Assets\\HotUpdateTest\\new_language_config",
  569. persistentFolder,
  570. assetBundleSets,
  571. DownloadAllAssetBundleSucceed,
  572. DownloadAllAssetBundleFailed,
  573. DownloadAssetBundleSucceed,
  574. DownloadAssetBundleFailed
  575. );
  576. }
  577. else
  578. {
  579. AssetBundleUtility.LoadAllAssetBundle
  580. (
  581. assetBundleSets,
  582. DownloadAllAssetBundleSucceed,
  583. DownloadAllAssetBundleFailed,
  584. DownloadAssetBundleSucceed,
  585. DownloadAssetBundleFailed
  586. );
  587. }
  588. }
  589. public static void DownloadAllAssetBundleSucceed()
  590. {
  591. NewDressroomConfigs = ConfigManager.GetDressRoomConfig(NewDressConfig.LoadAsset<TextAsset>(ResourceLabel.NewDressroomConfig));
  592. TextAsset[] textAssets = NewDressSke.LoadAllAssets<TextAsset>();
  593. foreach (var textAsset in textAssets)
  594. {
  595. UnityFactory.factory.LoadDragonBonesData(textAsset);
  596. }
  597. textAssets = NewDressTex.LoadAllAssets<TextAsset>();
  598. Texture2D[] textures = NewDressTex.LoadAllAssets<Texture2D>();
  599. for (int i = 0; i < textAssets.Length; i++)
  600. {
  601. ResourceManager.ObjectDictionary.Add(textures[i].name, textures[i]);
  602. UnityFactory.factory.LoadTextureAtlasData(textAssets[i], textures[i].name);
  603. }
  604. Sprite[] sprites = NewDressTex.LoadAllAssets<Sprite>();
  605. for (int i = 0; i < sprites.Length; i++)
  606. {
  607. PlayerManager.CloseSpriteDictionary.Add(sprites[i].name, sprites[i]);
  608. ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  609. }
  610. TextAsset language = NewLanguage.LoadAsset<TextAsset>(ResourceLabel.NewEnglish);
  611. XmlDocument document = new XmlDocument();
  612. document.LoadXml(language.text);
  613. Language.AddLanguageDocument(CurrentLanguage.English, document);
  614. language = NewLanguage.LoadAsset<TextAsset>(ResourceLabel.NewChineseSimplified);
  615. document = new XmlDocument();
  616. document.LoadXml(language.text);
  617. Language.AddLanguageDocument(CurrentLanguage.ChineseSimplified, document);
  618. language = NewLanguage.LoadAsset<TextAsset>(ResourceLabel.NewChineseTraditional);
  619. document = new XmlDocument();
  620. document.LoadXml(language.text);
  621. Language.AddLanguageDocument(CurrentLanguage.ChineseTraditional, document);
  622. NewFlowerConfigs = ConfigManager.GetFlowerConfig(NewFlowerConfig.LoadAsset<TextAsset>(ResourceLabel.NewFlowerConfig));
  623. sprites = NewFlowerTex.LoadAllAssets<Sprite>();
  624. for (int i = 0; i < sprites.Length; i++)
  625. {
  626. ResourceManager.ObjectDictionary.UniqueAdd(sprites[i].name, sprites[i]);
  627. }
  628. UpdateComplete = true;
  629. }
  630. public static void DownloadAllAssetBundleFailed()
  631. {
  632. Debug.Log("failed");
  633. }
  634. public static void DownloadAssetBundleSucceed(AssetBundleSet assetBundleSet)
  635. {
  636. if (assetBundleSet.Name == ResourceLabel.NewDressConfig)
  637. {
  638. NewDressConfig = assetBundleSet.AssetBundle;
  639. }
  640. else if (assetBundleSet.Name == ResourceLabel.NewDressSke)
  641. {
  642. NewDressSke = assetBundleSet.AssetBundle;
  643. }
  644. else if (assetBundleSet.Name == ResourceLabel.NewDressTex)
  645. {
  646. NewDressTex = assetBundleSet.AssetBundle;
  647. }
  648. else if (assetBundleSet.Name == ResourceLabel.NewLanguage)
  649. {
  650. NewLanguage = assetBundleSet.AssetBundle;
  651. }
  652. else if (assetBundleSet.Name == ResourceLabel.NewFlowerConfig)
  653. {
  654. NewFlowerConfig = assetBundleSet.AssetBundle;
  655. }
  656. else if (assetBundleSet.Name == ResourceLabel.NewFlowerTex)
  657. {
  658. NewFlowerTex = assetBundleSet.AssetBundle;
  659. }
  660. }
  661. public static void DownloadAssetBundleFailed(AssetBundleSet assetBundleSet, string error)
  662. {
  663. Debug.Log(error);
  664. }
  665. }