AssetLoader.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. using CommonUnity3D.MFUnity.LoadUtil;
  4. using System;
  5. namespace CommonAIClient.Unity.Utils
  6. {
  7. /// <summary>
  8. /// 载入一个资源
  9. /// </summary>
  10. public class AssetLoader
  11. {
  12. private string mAssetBundleName;
  13. private string mAssetName;
  14. private Action<bool, UnityEngine.Object, MFUnityAssetBundle> mCallback;
  15. private bool mASyncLoadAB;
  16. private bool mASyncLoadAsset;
  17. //工具
  18. private List<string> mDeps;
  19. private int mDepsLoadIndex;
  20. /// <summary>
  21. ///
  22. /// </summary>
  23. /// <param name="assetBundleName"></param>
  24. /// <param name="assetName"></param>
  25. /// <param name="callback arg1 是否加载成功, arg2 资源, arg3 所属AB"></param>
  26. /// <param name="bASyncLoadAB"></param>
  27. /// <param name="bASyncLoadAsset"></param>
  28. public AssetLoader(string assetBundleName, string assetName,
  29. Action<bool, UnityEngine.Object, MFUnityAssetBundle> callback,
  30. bool bASyncLoadAB = true, bool bASyncLoadAsset = true)
  31. {
  32. if (callback == null)
  33. {
  34. Debug.LogError("callback == null");
  35. return;
  36. }
  37. if (string.IsNullOrEmpty(assetBundleName) || string.IsNullOrEmpty(assetName))
  38. {
  39. Debug.LogError("string.IsNullOrEmpty(assetBundleName) || string.IsNullOrEmpty(assetName)");
  40. callback(false, null, null);
  41. return;
  42. }
  43. mAssetBundleName = assetBundleName;
  44. mAssetName = assetName;
  45. mCallback = callback;
  46. mASyncLoadAB = bASyncLoadAB;
  47. mASyncLoadAsset = bASyncLoadAsset;
  48. mDeps = MFUnityAssetBundleManager.GetInstance().GetDepList(mAssetBundleName);
  49. LoadDeps(mDepsLoadIndex);
  50. }
  51. public void ForeachDepFile(System.Action<string> action)
  52. {
  53. foreach (var elem in mDeps)
  54. {
  55. action(elem);
  56. }
  57. }
  58. private void DepsCallback(string name, UnityEngine.Object o, object userdata, bool isLoadOK)
  59. {
  60. LoadDeps(++mDepsLoadIndex);
  61. }
  62. void LoadDeps(int index)
  63. {
  64. //加载完毕
  65. if (mDeps.Count == mDepsLoadIndex)
  66. {
  67. MFUnityAssetBundleManager.GetInstance().GetAssetBundle(mAssetBundleName
  68. , (ab) =>
  69. {
  70. if (mCallback != null)
  71. {
  72. if (ab == null)
  73. {
  74. Debug.LogError("AB " + mAssetBundleName + " NOT EXIST");
  75. mCallback(false, null, null);
  76. return;
  77. }
  78. ab.GetAsset(mAssetName, mASyncLoadAsset, (name_, res_, userdata_, succ_) =>
  79. {
  80. if (mCallback != null)
  81. {
  82. mCallback(succ_, res_, ab);
  83. }
  84. }, null);
  85. }
  86. }, mASyncLoadAB);
  87. return;
  88. }
  89. MFUnityAssetBundleManager.GetInstance().LoadDep(mDeps[mDepsLoadIndex], mASyncLoadAB, mASyncLoadAsset, DepsCallback, null, mAssetBundleName);
  90. }
  91. }
  92. }