AssetBundle.CreateFromFile的有趣事情

有趣的事情发生了:

[@MenuItem("AssetBundles/Build AssetBundles")]

staticvoid BuildABs ()

{

AssetBundleBuild[] buildMap = new AssetBundleBuild[1];

buildMap [0].assetBundleName ="test.assetbundle";//打包的资源包名称

string[] resourcesAssets =new string[7];//此资源包以下有多少文件

resourcesAssets [0] ="Assets/BuildABRes/test1.csv";

resourcesAssets [1] ="Assets/BuildABRes/test1.txt";

resourcesAssets [2] ="Assets/BuildABRes/test2.txt";

resourcesAssets [3] ="Assets/BuildABRes/test3.txt";

resourcesAssets [4] ="Assets/BuildABRes/test4.txt";

resourcesAssets [5] ="Assets/BuildABRes/test4/test4.txt";

resourcesAssets [6] ="Assets/BuildABRes/test1.xml";

buildMap [0].assetNames = resourcesAssets;

BuildPipeline.BuildAssetBundles (Application.persistentDataPath +"/ABs", buildMap, BuildAssetBundleOptions.UncompressedAssetBundle, EditorUserBuildSettings.activeBuildTarget);

}

对以上文件进行打包后,打出的ab解出时会先对resourcesAssets进行排序。

string path =Application.persistentDataPath + "/ABs/test.assetbundle";

//不能使用file://

Debug.Log (path);

AssetBundle ab =AssetBundle.CreateFromFile (path);

foreach (var ain ab.GetAllAssetNames()) {

Debug.Log (a);

}

TextAsset txt = ab.LoadAsset<TextAsset> ("test1.xml");

Debug.Log (txt.text);


LoadAsset(name) name能够使用三种方式, 1,fullname; 2, 带后缀的简称; 3,不带后缀的简称

那么上面的方法能够使用

1、ab.LoadAsset<TextAsset> (“Assets/BuildABRes/test1.xml”); =>输出test1.xml的值

2、ab.LoadAsset<TextAsset> (“test1.xml");    =>输出test1.xml的值

3、ab.LoadAsset<TextAsset> (“test1”);                     =>输出test1.csv文件的值


3之所以输出test.csv的值 是排序后的结果。以最先匹配到的文件为准

unity 编报认三种通用文本文件格式:txt,xml,csv
另外还认一种二进制文件格式:.bytes
[lua,使用这样的方式 + + 加密]
除此之外的文本文件无法被unity打包。

原文地址:https://www.cnblogs.com/mfrbuaa/p/5148676.html