AssetManager
资产管理是游戏开发过程中经常会使用的模块,因为你需要读很多配置数据,你需要将Art提供给你的各种模型,贴图等资源显示出来。在Unity中,最经常使用的资产就是Prefab(预制体),下面以Prefab为例来说明AssetManger的使用方式。
首先看一下资产管理相关的接口
// 资产管理接口
public interface IAssetManager : IService
{
string AssetVersion { get; }
IAsset Load(string path, AssetType type);
LoadAsync(string path, AssetType type, Action<IAsset> handler);
IAsset LoadScene(string path, LoadSceneMode mode);
void LoadSceneAsync(string path, LoadSceneMode mode, Action<IAsset> handler);
void GC();
void UpdateAsync(Action callback);
}
// 资产接口
public interface IAsset : IDisposable
{
T Cast<T>();
}
// 资产类型
public enum AssetType
{
Unknown = -1,
Text, // 文本
Texture, // 纹理
Bytes, // 二进制
SpriteAtlas,// 精灵集,多用于2D和UI
Prefab, // 预制体
AudioClip, // 音频
Scene,
AnimationController,
}
样例1:显示Cube
在场景中创建一个Cube,在工程中创建Resources目录,再创建子目录Prefab,将场景中的Cube拖到Prefab目录上。

第一步:获取IAssetManager接口
详细获取服务方式参见GameBox使用
var assetManager = ServiceCenter.GetService<IAssetManager>();
第二步:使用Load同步创建Cube
using (var asset = assetManager.Load("Prefab/Cube.prefab", AssetType.Prefab)) // 指定Prefab类型
{
var go = GameObject.Instantiate(asset.Cast<GameObject>());
}
这里有几点需要注意
- 资产路径相对于Resources目录,详细参看3D引擎Unity
- 资产的名字必须要带有扩展名
- 使用C#关键字using是为了超出作用域后主动调用Dispose方法释放资源
当然如果资源很大,则需要考虑使用异步装载方法LoadAsync,防止游戏卡顿。
assetManager.LoadAsync("Prefab/Cube.prefab", AssetType.Prefab, asset =>
{
var go = GameObject.Instantiate(asset.Cast<GameObject>());
asset.Dispose(); // 主动释放资源
});
样例二:读取文本文件
在Resources目录下创建子目录Data,放一个文本文件,例如config.txt。
第一步:获取IAssetManager接口
详细获取服务方式参见GameBox使用
var assetManager = ServiceCenter.GetService<IAssetManager>();
第二步:使用Load同步读取文本内容
using (var asset = assetManager.Load("Data/config.txt", AssetType.Text)) // 指定文本类型
{
var text = asset.Cast<string>(); // 获取文本内容
Debug.Log(text);
}
注意事项同样例一。