//异步加载 public void LoadAsync(IXAssetManager manager, EnumFileLocation location, EnumBundleType bundleType, string name, Action <string, AssetBundle> callback = null) { m_AssetManager = manager; m_BundleName = name; m_dependencies.Clear(); var dependencies = manager.GetDependencies(m_BundleName); if (dependencies != null) { m_dependencies.AddRange(dependencies); m_dependencyCurCount = 0; m_dependencyMaxCount = dependencies.Count; foreach (var dependent in dependencies) { manager.LoadBundleAsync(dependent, _OnLoadedDependent); } } var fullPath = XABUtilities.GetBundleFullPath(location, bundleType, name); XDebug.Log(XABConst.Tag, $"加载 {fullPath}"); _StartLoadAsync(fullPath); m_state = EnumJobState.Process; m_callback += callback; }
protected void _OnDownloadComplete(string error, byte[] data) { m_state = EnumJobState.Done; if (data == null) { return; } var name = m_curDownload; m_manager.AssetInfoManager.SetLocation(name, EnumFileLocation.Client); //保存下载文件 var path = XABUtilities.GetResPath(EnumFileLocation.Client, EnumBundleType.Hotfix); XUtilities.SaveFile($"{path}/{name}", data); var hotfixInfo = m_manager.AssetInfoManager.hotfixInfo; //保存filelist var client_filelist = hotfixInfo.client_filelist; var server_filelist = hotfixInfo.server_filelist; var serverFileInfo = server_filelist.GetFileInfo(name); var clientFileInfo = client_filelist.GetFileInfo(name); if (clientFileInfo == null) { clientFileInfo = new XFileList.XFileInfo(); client_filelist.AddFileInfo(name, clientFileInfo); } clientFileInfo.name = name; clientFileInfo.path = serverFileInfo.path; clientFileInfo.length = serverFileInfo.length; clientFileInfo.md5 = serverFileInfo.md5; XFileList.SaveFileList(XABUtilities.GetResPath(EnumFileLocation.Client, EnumBundleType.Hotfix), client_filelist); }
protected void _Download(string name) { m_state = EnumJobState.Process; m_curDownload = name; var url = $"{m_serverAddress}/{name}"; XWebRequestManagerSingle.GetUrl(url, _OnDownloadComplete, "", _OnDowloadProgress); }
public void StopAsync() { if (m_state != EnumJobState.Process) { return; } m_AssetManger?.UnloadBundle(m_BundleName); _StopLoadAsync(); m_state = EnumJobState.None; }
public void Dispose() { if (m_state != EnumJobState.None) { m_AssetManger?.UnloadBundle(m_BundleName); } if (m_state == EnumJobState.Process) { _StopLoadAsync(); } m_AssetObject = null; m_callback = null; m_state = EnumJobState.None; }
public override void Enter() { m_index = 0; m_state = EnumJobState.None; m_serverAddress = m_manager.serverAddress; #if UNITY_EDITOR m_serverAddress = EditorPrefs.GetString(XABConst.EKResUrl); if (string.IsNullOrEmpty(m_serverAddress)) { Debug.LogError("没有配置url"); return; } #endif }
public void SetValue(Object value) { if (value != null) { XDebug.Log(XABConst.Tag, $"加载成功!! bundle:{m_BundleName} asset:{m_AssetXName}"); m_state = EnumJobState.Done; } else { XDebug.LogError(XABConst.Tag, $"加载失败!! bundle:{m_BundleName} asset:{m_AssetXName}"); m_state = EnumJobState.None; } m_AssetObject = value; m_callback?.Invoke(m_AssetXName, m_AssetObject); m_callback = null; }
public void StopAsync() { if (m_state != EnumJobState.Process) { return; } if (m_AssetManager != null) { foreach (var dependent in m_dependencies) { m_AssetManager.UnloadBundle(dependent); } } _StopLoadAsync(); m_state = EnumJobState.None; }
public void Dispose() { if (m_AssetManager != null && m_state != EnumJobState.None) { foreach (var dependent in m_dependencies) { m_AssetManager.UnloadBundle(dependent); } } if (m_AssetBundle != null) { m_AssetBundle.Unload(true); m_AssetBundle = null; } if (m_state == EnumJobState.Process) { _StopLoadAsync(); } m_AssetBundle = null; m_callback = null; m_state = EnumJobState.None; }
public void LoadAsync <T>(IXAssetManager manager, string name, Action <string, Object> callback = null) where T : Object { m_AssetManger = manager; m_BundleName = manager.GetBundleNameByAssetName(name); m_AssetXName = name; manager.LoadBundleAsync(m_BundleName, (bundleName, assetBundle) => { if (m_BundleName != bundleName) { return; } if (assetBundle == null) { SetValue(null); return; } m_LoadAssetRequest = assetBundle.LoadAssetAsync <T>(m_AssetXName); }); m_state = EnumJobState.Process; m_callback += callback; }