Exemple #1
0
    /// <summary>
    /// 释放资源
    /// </summary>
    /// <param name="assetName"></param>
    public void ReleaseAsset(string assetName)
    {
        CMAsset cmasset = null;

        if (TryGetAsset(assetName, out cmasset))
        {
            cmasset.RemoveRef();
        }
    }
Exemple #2
0
    /// <summary>
    ///  卸载资源
    /// </summary>
    /// <param name="assetName"></param>
    public void UnloadAsset(string assetName)
    {
        CMAsset cmasset = null;

        if (TryGetAsset(assetName, out cmasset))
        {
            m_dicAssets.Remove(assetName);
            DataManager.Manager <CMAssetBundleLoaderMgr>().RemoveDependenceAssetRef(assetName);
            //Engine.Utility.Log.Info("CmAssetBundle->UnloadAsset {0}", assetName);
        }
    }
Exemple #3
0
    /// <summary>
    /// 引用资源
    /// </summary>
    /// <param name="assetName">资源名称</param>
    public void ReferenceAssset(string assetName)
    {
        //if (!IsDone())
        //{
        //    Debug.LogError(string.Format("CMAssetBundle {0} Not Ready ",assetName));
        //    return ;
        //}
        CMAsset cmasset = null;

        if (!TryGetAsset(assetName, out cmasset))
        {
            cmasset = new CMAsset(assetName, this);
            m_dicAssets.Add(assetName, cmasset);
        }
        cmasset.AddRef();
    }
Exemple #4
0
    /// <summary>
    /// 回调资源加载完成
    /// </summary>
    /// <param name="assetName"></param>
    private void InvokeAssetLoadDlg(string assetName)
    {
        List <CMAssetLoadFinsh> callbacks = null;

        if (m_dicLoadAssetDlg.TryGetValue(assetName, out callbacks))
        {
            CMAsset cmasset = null;

            if (TryGetAsset(assetName, out cmasset))
            {
                for (int i = 0, max = callbacks.Count; i < max; i++)
                {
                    if (null == callbacks[i].FinshDlg)
                    {
                        continue;
                    }
                    callbacks[i].FinshDlg.Invoke(cmasset.Asset, callbacks[i].Param1, callbacks[i].Param2, callbacks[i].Param3);
                }
            }
            m_dicLoadAssetDlg.Remove(assetName);
        }
    }
Exemple #5
0
    /// <summary>
    /// 创建资源(同步)
    /// </summary>
    public UnityEngine.Object CreateAsset(string assetName)
    {
        CMAsset cmasset = null;

        UnityEngine.Object obj = null;
        if (IsDone() && null != m_ab &&
            (!TryGetAsset(assetName, out cmasset) || !cmasset.Ready))
        {
            obj = m_ab.LoadAsset(assetName);
        }
        else if (null != cmasset && cmasset.Ready)
        {
            obj = cmasset.Asset;
        }
        //对本身添加引用计数
        ReferenceAssset(assetName);
        if (null != obj)
        {
            OnAssetLoaded(assetName, obj);
            InvokeAssetLoadDlg(assetName);
        }
        return(obj);
    }
Exemple #6
0
    /// <summary>
    /// 资源加载完成
    /// </summary>
    /// <param name="assetName">资源名称</param>
    /// <param name="assetObj">资源对象</param>
    private void OnAssetLoaded(string assetName, UnityEngine.Object assetObj)
    {
        CMAsset cmA      = null;
        bool    needInit = false;

        if (!m_dicAssets.TryGetValue(assetName, out cmA))
        {
            needInit = true;
            cmA      = new CMAsset(assetName, this);
            m_dicAssets.Add(assetName, cmA);
        }
        else if (!cmA.Ready)
        {
            needInit = true;
        }

        if (needInit)
        {
            cmA.InitAsset(assetObj);
            //对依赖资源添加引用计数
            ReferenceDependenceAssset(assetName);
        }
    }
Exemple #7
0
 /// <summary>
 /// 尝试获取资源
 /// </summary>
 /// <param name="assetName"></param>
 /// <param name="assetObj"></param>
 /// <returns></returns>
 private bool TryGetAsset(string assetName, out CMAsset cmasset)
 {
     return(m_dicAssets.TryGetValue(assetName, out cmasset));
 }