大多数场景不推荐,会导致一些bug
using UnityEngine;
public class LoadAssetScript : MonoBehaviour
{
Public GameObject _referenceDirectlyOB; //直接引用
private void Start()
{
Instantiate(_referenceDirectlyOB); //实例化资源
setparent();
}
}
Resource方案
仅用于小项目和demo展示时的资源管理。
Resources目录加载也是比较常用方便的方法,通常结合上配置表能比较准确快速的进行配置。
弊端也是相当明显的:
1、首先Resources目录下的所有文件都会随包打包,造成包体过大。
2、其次Resources目录没办法热更新资源,只能重新打包游戏。
3、再者命名对资源加载影响重大,命名的变更需要更加谨慎。
using UnityEngine;
public class LoadAssetScript : MonoBehaviour
{
Public string _resourcesPath;
private void Start()
{
// 加载资源
var prefab = Resources.Load(_resourcesPath);
// 实例化资源
Instantiate(prefab);
}
}
Unity 读取调用资源 Resources.Load(详细+示例)_Min-篮球小菜鸡的博客-CSDN博客_resources.load unity
AB包方案如何项目需要热更新资源,AssetBundle是唯一选择,但AssetBundle的使用与管理会涉及资源引用关系、资源打包分配的粒度等随着资源的增多导致复杂度上升到难以管理。
首先你会需要用到打包脚本,将资源进行相对应的打包,期间要处理资源的依赖和复用的问题。
之后你需要更改资源加载的方式,需要通过加载AssetBundle然后再读取其中的对应资源进行加载。这个时候根据应用场景,你需要避免AB过大而过度加载占用内存,同时也要防止AB颗粒过小而导致AB数量剧增而增加大幅管理难度。
虽然能够使用像是AssetBundleManager/AssetBundleGraph一类的工具来辅助开发,或是制作、使用社区上的一些AssetBundle打包框架来制作资源包。但从一开始就需要考虑进项目中,会减缓开发的速度。
AA包方案AssetAddressables方案。
Unity资源管理 AssetBundle的封装Addressable系统_Peter_Gao_的博客-CSDN博客
Addressables是对AB包方式的高级封装,大幅减小了资源管理的复杂度。
特点:
-
快速迭代:使用Addressable在开发前期就进入快速开发的阶段,使用任何你喜欢的资源管理技术,你都能快速的切换来Addressable系统中。几乎不需要修改代码。
-
依赖管理:Addressable系统不仅仅会帮你管理、加载你指定的内容,同时它会自动管理并加载好该内容的全部依赖。在所有的依赖加载完成,你的内容彻底可用时,它才会告诉你加载完成。
-
内存管理:Addressable不仅仅能记载资源,同时也能卸载资源。系统自动启用引用计数,并且有一个完善的Profiler帮助你指出潜在的内存问题。
-
内容打包:Addressable系统自动管理了所有复杂的依赖连接,所以即使资源移动了或是重新命名了,系统依然能够高效地找到准确的依赖进行打包。当你需要将打包的资源从本地移到服务器上面,Addressable系统也能轻松做到,几乎不需要任何代价。
https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/index.html
打包框架https://xasset.pro/docs/about