在安卓下无法获取StreamingAssets目录下所有目录和文件名,所以需要提前将文件名整理成一个文件filelist.txt。
1.用批处理命令将StreamingAssets下所有文件名输出到filelist.txt中
chcp 65001是使用UTF-8编码,否则中文是乱码。
@echo off
chcp 65001
dir /b /s /a-d > filelist.txt
2.将filelist.txt中绝对路径转换成相对路径
打开filelist.txt,去掉StreamingAssets

3.确何filelist.txt为UTF-8

4.复制StreamingAssets目录下所有文件到PersistentData
cs
void Start () {
CopySteamingAssetsFileToPersistentDataPath();
}
void CopySteamingAssetsFileToPersistentDataPath()
{
string listFile = Path.Combine(Application.streamingAssetsPath, "filelist.txt");
WWW reader = new WWW(listFile);
while (!reader.isDone) { }
string textString = reader.text;
Debug.Log(textString.Length);
List<string> striparr = textString.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();
List<string> lines = striparr.Where(s => !string.IsNullOrEmpty(s)).ToList();
for (int i = 0; i < lines.Count; i++)
{
string srcfile = Path.Combine(Application.streamingAssetsPath, lines[i]);
WWW reader1 = new WWW(srcfile);
while (!reader1.isDone) { }
string dstFile = Path.Combine(Application.persistentDataPath, lines[i]);
//安卓的路径只能是/,反斜杠\无效
dstFile = dstFile.Replace('\\','/');
string dir = Path.GetDirectoryName(dstFile);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
Debug.Log(dstFile);
}
File.WriteAllBytes(dstFile, reader1.bytes);
}
}
5.AssetBundle资源需要针对Android单独打包,与Windows的不通用。
打包完将资源复制到StreamingAssets下

cs
ROBOCOPY Android ..\Assets\StreamingAssets\Android /E
加载AssetBundle
cs
//存放AssetBundle的根目录名字
private static string rootFolder = "Android";
//本地资源路径
public string AbPath
{ get
{
string path =
#if UNITY_ANDROID && !UNITY_EDITOR
Application.persistentDataPath + "/";
#else
Application.streamingAssetsPath + "/";
#endif
return string.Format("{0}{1}/", path, rootFolder);
}
}
cs
AssetBundle assetBundle = AssetBundle.LoadFromFile(string.Format("{0}{1}", AbPath, rootFolder));
......