Exemple #1
0
        public void Load(bool a_bAsync, UnityAction <AssetPackage> a_onLoadFinished)
        {
            if (LoadState == EAssetLoadState.Invalid)
            {
                _RegisterFinishedListener(a_onLoadFinished);

                // 还没有加载,则根据加载命令a_bAsync,选择同步,或者异步加载
                if (a_bAsync)
                {
                    m_bundleLoadRequest = AssetBundle.LoadFromFileAsync(m_strPath);

                    // TODO 测试异步加载不存在的资源的情况

                    LoadState = EAssetLoadState.Loading;
                }
                else
                {
                    m_assetBundle = AssetBundle.LoadFromFile(m_strPath);
                    _OnLoadFinished();
                }
            }
            else if (LoadState == EAssetLoadState.Loading)
            {
                _RegisterFinishedListener(a_onLoadFinished);
            }
            else
            {
                // 加载已完成,则只需要直接执行回调
                if (a_onLoadFinished != null)
                {
                    a_onLoadFinished(this);
                }
            }
        }
Exemple #2
0
        public void Unload()
        {
            if (LoadState == EAssetLoadState.Loading)
            {
                return;
            }

            Assert.IsTrue(
                m_listOnLoadFinished.Count <= 0 &&
                m_bundleLoadRequest == null
                );
            if (m_assetBundle != null)
            {
                m_assetBundle.Unload(false);
                m_assetBundle = null;
            }
            LoadState = EAssetLoadState.Invalid;
        }
Exemple #3
0
        private void _OnLoadFinished()
        {
            if (m_assetBundle == null)
            {
                Logger.Error("资源加载失败:{0}", m_strPath);
                LoadState = EAssetLoadState.Error;
            }
            else
            {
                LoadState = EAssetLoadState.Done;
            }

            while (
                m_listOnLoadFinished.Count > 0 &&
                (LoadState == EAssetLoadState.Done || LoadState == EAssetLoadState.Error)
                )
            {
                UnityAction <AssetPackage> unityAction = m_listOnLoadFinished[0];
                m_listOnLoadFinished.RemoveAt(0);
                unityAction(this);
            }
        }