unity中AssetBundle.LoadAsset参数name的含义

学习AssetBundle时,看到网上从AssetBundle加载资源的的方法一般如下:

1 AssetBundle ab=AssetBundle.LoadFromFile("AssetBundles/scene/model.ab");
2 GameObject go = ab.LoadAsset<GameObject>("Cube");

我自己动手尝试发现LoadAsset一直返回null,unity版本2018.4,我的代码如下:

AssetBundle ab = AssetBundle.LoadFromFile("assets/res/ui/com/prefab1.unity3d");
Object obj = ab.LoadAsset("Assets/Res/UI/Com/prefab1/SKillIcon.prefab");

  

  

prefab1.unity3d.manifest如下:

ManifestFileVersion: 0
CRC: 3804775825
Hashes:
  AssetFileHash:
    serializedVersion: 2
    Hash: a0170fda41556bdab22578bee2082945
  TypeTreeHash:
    serializedVersion: 2
    Hash: 75a1acdd0f98b3c749495ab12239c32d
HashAppended: 0
ClassTypes:
- Class: 1
  Script: {instanceID: 0}
- Class: 28
  Script: {instanceID: 0}
- Class: 114
  Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114
  Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 115
  Script: {instanceID: 0}
- Class: 213
  Script: {instanceID: 0}
- Class: 222
  Script: {instanceID: 0}
- Class: 224
  Script: {instanceID: 0}
- Class: 687078895
  Script: {instanceID: 0}
Assets:
- Assets/Res/UI/Com/prefab1/UiIcon.prefab
- Assets/Res/UI/Com/prefab1/SKillIcon.prefab
Dependencies:

  

官方文档如下:

AssetBundle.LoadAsset

 
public Object LoadAsset (string name);

描述

从捆绑包中加载名为 name 的资源。

您应该准确指定 AssetBundleBuild 对象中的名称,即对象的相对路径加文件扩展名。

 

对照官方文档,name就应该是  Assets/Res/UI/Com/prefab1/SKillIcon.prefab 才对,百思不得其解,最后我试着用AssetBundle的 GetAllAssetNames接口把所有name都打印出来,发现打印的是 AssetBundleBuild.addressableNames里的东西,把name换成addressableNames对应的值后,LoadAsset返回正常了。

也就是说name 代表addressableNames中对应的值。

官方文档如下:

AssetBundleBuild.addressableNames

public string[] addressableNames ;

描述

用于加载资源的可寻址名称。

 

posted @ 2023-01-13 17:42  冷夜 - 网游编程技术  阅读(436)  评论(0编辑  收藏  举报