Unity实战笔记_5.简单的UI框架RescorceManager

来源:互联网 发布:java svg转jpg 编辑:程序博客网 时间:2024/05/15 21:58

因为要实现动态的场景加载,所以要使用到Rescorce或者AssetBundle。
这里先使用Rescorce加载。由于直接使用Rescorce中的接口并不方便。所以将其封装到一个RescorceManager类中。
首先应将这个类设置为单例,外部通过获取到ResManager的单例来加载或卸载资源。


首先实现单例:

    #region    private static ResManager instance;    /// <summary>    /// 获取单例    /// </summary>    private static ResManager Instance    {        get        {            if(instance==null)            {                instance = new GameObject("_ResManager").AddComponent<ResManager>();            }            return instance;        }    }    #endregion

封装Load接口

    public T Load<T>(string path, bool isCache) where T : UnityEngine.Object    {        T assetObj = Resources.Load<T>(path);        if(assetObj==null)        {            Debug.LogError("加载的资源不存在");        }        return assetObj;    }

参数isCache用于标记是否将该资源加入缓存中(一些场景可能会频繁打开,所以将其加入缓存中,防止重复创建耗费资源)
所以创建一个容器将加入缓存的资源保存起来
添加后函数如下

    public T Load<T>(string path, bool isCache) where T : UnityEngine.Object    {        //判断当前加载的文件是否在缓存表中,如果在,直接返回表中的值        if(cacheTable.Contains(path))        {            return cacheTable[path]as T;//通过key来找到表中的数据        }        T assetObj = Resources.Load<T>(path);        if(assetObj==null)        {            Debug.LogError("加载的资源不存在");        }        if(isCache)        {            cacheTable.Add(path, assetObj);            Debug.Log("将对象加入缓存中,path=" + path);        }        return assetObj;    }

添加函数CreateGameObject用来创建加载的游戏物体。

    /// <summary>    /// 从加载的资源中创建出游戏物体    /// </summary>    /// <param name="path">资源路径</param>    /// <param name="isCache">是否加入缓存</param>    /// <returns>GameObject游戏物体</returns>    public GameObject CreateGameObject(string path, bool isCache)    {        GameObject assetObj = Load<GameObject>(path, isCache);        GameObject gameObject = Instantiate(assetObj);        if(gameObject==null)        {            Debug.LogError("加载资源出错,path=" + path);        }        return gameObject;    }
0 0
原创粉丝点击