AssetBundle中加载资源的三种方式

首先当我们讨论LoadAsset()系列方法时,我们需要明确几个概念,首先是资源文件,就是开发时放入Assets目录中的 *,png,*.FBX ,*,mat 等等文件,另一个是资源对象,他们是基于我们的资源文件生成对象。每一个资源文件都会生成一个主资源对象,比如 *.png 会生成Texture2D ,*.FBX 会生成GameObject对象 等等。但是除了主资源对象外,有些资源文件还能生成子资源对象,比如*.png文件就可以生成很多子Sprite资源对象。总之,资源文件和资源对象之间是一对多的关系,同时资源文件和主资源对象之间又是一对一关系而 LoadAsset()系列方法的参数 name 是指的资源文件名,而不是资源对象名,我们可以传入三种形式的资源文件名:1.无后缀的文件名,2.有后缀文件名,3.已Asset目录开头的全路径名。

        LoadAsset()执行时,先找到符合name参数的的资源文件并加载,然后根据函数是否传递了资源类型,来决定返回的资源对象,比如,如果你有一个图片资源文件叫A.png。对应到两个资源对象Texture2D和Sprite,如果你调用LoadAsset<Sprite<("A") 就会返回这个A.png资源文件对应的Sprite对象,如果你在一个AB中有两个资源文件A.png和A.perfab,则LoadAsset<Sprite>("A")方法,会依次加查看资源文件A.png,A.Perfab是否包含Sprite类型的资源对象,并找到第一个含有Sprite类型资源对象的资源文件并加载返回。如果没有传递资源对象类型,则直接加载找到符合名称的第一个资源文件并返回其主资源对象。

下面是使用示例:

1.使用资源的名称(不带后缀)

 //返回文件名为Cube的资源文件,的第一个找到的GameObject资源对象
 GameObject _gameObjectName = _request.assetBundle.LoadAsset<GameObject>("Cube");
 ///返回文件名为Cube的资源文件,的第一个找到的Texture2D资源对象
 Texture2D _texture2DName = _request.assetBundle.LoadAsset<Texture2D>("Cube");

2.使用全名称(带后缀)

//返回文件名为Cube.perfab的资源文件的主资源对象
GameObject _gameObjectFullName = _request.assetBundle.LoadAsset("Cube.prefab") as GameObject;
//返回文件名为Cube.png的资源文件的主资源对象
Texture2D _texture2DFullName = _request.assetBundle.LoadAsset("Cube.png") as Texture2D;

3.使用全路径

//返回全路径为 Assets/Box/Cube.prefab的资源文件的主资源对象
GameObject _gameObjectFullPathFullName = _request.assetBundle.LoadAsset("Assets/Box/Cube.prefab") as GameObject;
//返回全路径为 Assets/Box2/Cube.png 的资源文件的主资源对象
Texture2D _texture2FullPathDFullName = _request.assetBundle.LoadAsset<Texture2D>("Assets/Box2/Cube.png") as Texture2D;

资源文件的全路径名,可以在ab包的 manifest文件中可以看到

猜你喜欢

转载自blog.csdn.net/u012149999/article/details/104053544