19、StreamingAssets和Resources目录的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19、StreamingAssets和Resources目录的区别相关的知识,希望对你有一定的参考价值。
参考技术A 都是只读的、Resources会加密,StreamingAssets不加密。当时是想播放一段音频,于是我把资源放在StreamingAssets目录下,用WWW加载a.ogg,然后并没有得到我想要的结果。但是放在Resources目录下面,Resources.Load()却能播放。后来经过研究,终于知道了这么几个概念的意思,也就清楚了前面为什么不能播放。
要说明这个原因,首先说一下AssetBundle。很多人应该知道这是unity3d里面用来打包资源的,支持的格式有限,如文理、音频、二进制、文本等。像一些.cs文件、.mp4文件是没法打包的。Resources目录下的资源在打包之后,也会生成AssetBundle,只是Resources下的资源会被系统自动处理。
那AssetBundle到底是什么呢?其实可以把它简单看成是一个资源集合,必须用WWW类来进行读取,而Resources可以看成是一个特殊的WWW,只能对于Resources目录的资源。而WWW读取的内容也必须是AssetBundle,所以一个单独的ogg文件无法用WWW读取,必须先打包成AssetBundle,才能用WWW读取。
StreamingAssets又是什么呢?这是个Raw目录,里面的内容不会加密、编码。比如png、ogg、AssetBundle文件,原来什么样,打包就是什么样。要使用这些文件的话,必须用对应的类来访问,如AssetBundle用WWW类,mp4用播放器插件加载(包括解析),用WWW加载mp4是不行的,因为识别不出来。
Resource文件下所有的文件不管是否使用都会打包。
相同资源放在不同目录,会造成冗余资源的打包。
Unity读取StreamingAssets路径下的文件
/// <summary>
///读取StreamingAssets中的文件
/// </summary>
/// <param name="path">StreamingAssets下的文件路径</param>
/// <returns>读取到的字符串</returns>
public static string GetTextForStreamingAssets(string path)
{
string localPath = "";
if (Application.platform == RuntimePlatform.Android)
{
localPath = Application.streamingAssetsPath + "/" + path;
}
else
{
localPath = "file:///" + Application.streamingAssetsPath + "/" + path;
}
WWW www = new WWW(localPath);
if (www.error != null)
{
Debug.LogError("error while reading files : " + localPath);
return ""; //读取文件出错
}
while (!www.isDone) { }
Debug.Log("File content : " + www.text);//www下面还有获取字节数组的属性
return www.text;
}
以上是关于19、StreamingAssets和Resources目录的区别的主要内容,如果未能解决你的问题,请参考以下文章
unity使用文件流操作streamingassets下的文件
unity发布web后,怎么获取StreamingAssets文件夹的路径