[GameFramework]教程11 Asset回收与释放机制

今天看了一天的资源释放,发现看蒙圈了。到晚上才发现,原来释放分为两种:对象和资源。

下面我们针对这两种资源的释放进行代码的一个梳理

其实也简单,主要分为几个模块:

【ResourceManager.ResourceLoader.AssetObject】【ResourceManager.ResourceLoader】【ResourceManager】

【ObjectPoolManager.Object】【ObjectPoolManager.ObjectPool】

【UIManager】

// 回收对象
UIManager
-> CloseUIForm -> m_RecycleQueue.AddLast
-> Update -> m_InstancePool.Unspawn
ObjectPoolManager.ObjectPool
->Unspawn -> obj.Unspawn -> ObjectPoolManager.Object
-> Release -> obj.Release(); -> ObjectPoolManager:Release()
//卸载资源
DefaultUIFormHelper
-> m_ResourceComponent.UnloadAsset
-> ResourceComponent -> UnloadAsset
-> IResourceManager ->UnloadAsset
-> ResourceManager.ResourceLoader -> UnloadAsset ->ObjectPoolManager.ObjectPool
->Unspawn -> obj.Unspawn -> ResourceManager.ResourceLoader.AssetObject -> OnUnspawn 之后就卸载了依赖资源


大家可以根据这个流程自己梳理一遍,别蒙圈!!注意那个释放的是对象,那个释放的是资源


E神说:
我大致列了下:
加载资源队列
加载资源优先级处理
/// <summary>
/// 增加任务。
/// </summary>
/// <param name="task">要增加的任务。</param>
public void AddTask(T task)
{
    LinkedListNode<T> current = m_WaitingTasks.First;
    while (current != null)
    {
        if (task.Priority > current.Value.Priority)
        {
            break;
        }

        current = current.Next;
    }

    if (current != null)
    {
        m_WaitingTasks.AddBefore(current, task);
    }
    else
    {
        m_WaitingTasks.AddLast(task);
    }
}
AssetBundle级别的依赖处理
Asset级别的依赖处理
可调整数量的多资源同时加载
多资源同时加载导致的共同依赖问题处理
带有依赖关系的引用计数处理
循环依赖处理
Asset回收与释放机制 (上面的是一些)
AssetBundle回收与释放机制
使用 IoC 把框架逻辑和 Unity 分离
回调或事件通知设计
异常处理机制 




猜你喜欢

转载自blog.csdn.net/zphshiwo/article/details/80658339