public void Dispose() { scenceName = null; bundleName = null; resName = null; callBack = null; next = null; }
//构造函数 public NativeAssetCommandNode(string _scenceName, string _bundleName, string _resName, bool _isSingle, ushort _backId, NativeAssetCallBack _callBack, NativeAssetCommandNode _next) { scenceName = _scenceName; bundleName = _bundleName; resName = _resName; isSingle = _isSingle; backId = _backId; callBack = _callBack; next = _next; }
public void LoadAsset(string scenceName, string bundleName, string resName, bool isSingle, ushort backId) { //当前未加载过 bundle if (!ABLoadManager.Instance.IsLoadedBundle(scenceName, bundleName)) { ABLoadManager.Instance.LoadAssetBundle(scenceName, bundleName, LoadProgress); string fullName = ABLoadManager.Instance.GetRelateBundleName(scenceName, bundleName); // 判断当前是否有该 Bundle if (fullName != null) { NativeAssetCommandNode node = new NativeAssetCommandNode(scenceName, bundleName, resName, isSingle, backId, SendBackMsg, null); CommandManager.AddCommand(fullName, node); } else { Debug.Log("The Scence Bundle Txt Don't have bundle bundleName =" + bundleName); } } else { bool isLoadFinish = ABLoadManager.Instance.IsLoadingFinish(scenceName, bundleName); // 资源正在加载中 if (!isLoadFinish) { string fullName = ABLoadManager.Instance.GetRelateBundleName(scenceName, bundleName); // 判断当前是否有该 Bundle if (fullName != null) { NativeAssetCommandNode node = new NativeAssetCommandNode(scenceName, bundleName, resName, isSingle, backId, SendBackMsg, null); CommandManager.AddCommand(fullName, node); } else { Debug.Log("The Scence Bundle Txt Don't have bundle bundleName =" + bundleName); } } //资源已经加载过 处于缓存中 else { if (isSingle) { UnityEngine.Object obj = ABLoadManager.Instance.LoadSingleRes(scenceName, bundleName, resName); CurrBackMsg.ChangeMsg(backId, obj); } else { UnityEngine.Object[] objs = ABLoadManager.Instance.LoadMultRes(scenceName, bundleName, resName); CurrBackMsg.ChangeMsg(backId, objs); } AnalysisMsg(CurrBackMsg); } } }
public void CommandCallBack(string bundleName) { if (commandDir.ContainsKey(bundleName)) { NativeAssetCommandNode tmpNode = commandDir[bundleName]; do { tmpNode.callBack(tmpNode); tmpNode = tmpNode.next; } while (tmpNode != null); } }
public void SendBackMsg(NativeAssetCommandNode node) { if (node.isSingle) { UnityEngine.Object obj = ABLoadManager.Instance.LoadSingleRes(node.scenceName, node.bundleName, node.resName); CurrBackMsg.ChangeMsg(node.backId, obj); } else { UnityEngine.Object[] objs = ABLoadManager.Instance.LoadMultRes(node.scenceName, node.bundleName, node.resName); CurrBackMsg.ChangeMsg(node.backId, objs); } AnalysisMsg(CurrBackMsg); }
/// <summary> /// 加载完成,并向上层发送消息后,移除bundle对应缓存的所有命令 /// </summary> /// <param name="bundleName"></param> public void RemoveBundleCommand(string bundleName) { if (commandDir.ContainsKey(bundleName)) { NativeAssetCommandNode currNode = commandDir[bundleName]; while (currNode.next != null) { NativeAssetCommandNode tmpNode = currNode.next; currNode = currNode.next; tmpNode.Dispose(); } currNode.Dispose(); commandDir.Remove(bundleName); } }
public void AddCommand(string bundleName, NativeAssetCommandNode node) { if (commandDir.ContainsKey(bundleName)) { NativeAssetCommandNode tmpNode = commandDir[bundleName]; while (tmpNode.next != null) { tmpNode = tmpNode.next; } tmpNode.next = node; } else { commandDir.Add(bundleName, node); } }