Ejemplo n.º 1
0
        //异步加载
        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);
        }
Ejemplo n.º 4
0
 public void StopAsync()
 {
     if (m_state != EnumJobState.Process)
     {
         return;
     }
     m_AssetManger?.UnloadBundle(m_BundleName);
     _StopLoadAsync();
     m_state = EnumJobState.None;
 }
Ejemplo n.º 5
0
 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
        }
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
        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;
        }