Resources 文件夹用着简单,但会打进包体,还不方便按需卸载。项目稍大之后我改用 Addressables:资源给地址或 Label,运行时按地址加载。真正要记住的不是 API 名字,而是句柄的生命周期。
AsyncOperationHandle<GameObject> _handle;
async void Start()
{
_handle = Addressables.InstantiateAsync("enemy/slime");
await _handle.Task;
}
void OnDestroy()
{
if (_handle.IsValid())
Addressables.Release(_handle);
}
我给自己列的清单
- 加载和释放成对出现。界面关了、关卡卸了,对应句柄就要 Release。
- InstantiateAsync 创建的实例,优先用 Addressables.ReleaseInstance,不要只 Destroy 却忘了引用计数。
- Label 适合“这一组皮肤、这一组音频”;单个关键预制体用明确地址更好查。
- 编辑器里能加载,不代表分组、打包路径和远端目录已经配对。真机前至少打一次 Play Mode Script 以外的包验证。
和小项目相比,Addressables 的心智成本更高。如果资源很少、也不会热更,继续用直接引用完全够用。等包体和重复依赖开始疼了,再上这套更划算。
备忘:不要把同一份资源同时塞进 Resources 和 Addressables。两套管线各算各的,内存和包体都会重复。