上一篇讲到了如何打包assetsbundle,紧跟而来的就是加载assetsbundle的问题。资源的动态的加载用到Resources和AssetsBundle这两种方式,而后一种方式无论是在热更还是大小,安全等方面更具优势。下面要贴出作者一直在用的资源管理方式。
大概是利用枚举区分这两种方式,在unity编辑器里可以随意切换,打包发布时也可以根据自己的需求切换。
利用assetsbundle加载资源时,需要在启动游戏的时候,将所需的assetsbundle加载进内存,再通过具体方法加载assets bundle的资源。
这里我设置了一个最大资源加载数的选项, 因为游戏要加载的,动态生成的prefab等往往不会频繁使用,通过queue队列的方式,可以有效减少动态加载量很少的资源,常驻内存的情况。
废话不多说了,贴两张效果图
下面贴一下代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Object = UnityEngine.Object;
using LitJson;
using System.Linq;
enum LoadAssetsType
{
AssetsBundle = 0,
Resources = 1
}
public class AssetsManager : MonoBehaviour
{
/// <summary>
/// 单例
/// </summary>
private static AssetsManager _instance;
[SerializeField]
[Tooltip("加载资源的方式")]
private LoadAssetsType _loadAssetsType;
[SerializeField]
[Tooltip("最大资源缓存数")]
private int _maxResourcesCount = 30;
/// <summary>
/// 数据字典
/// </summary>
private Dictionary<string, Object> _dicAssets = new Dictionary<string, Object>();
/// <summary>
/// 资源key值的队列
/// </summary>
private Queue<string> _assetsName = new Queue<string>();
///