在Unity3D中 Resources微信在手机中的文件夹夹和StreamingAssets有什么区别

Unity3D中的资源路径: Application.dataPath:此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。
Application.streamingAssetsPath:此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。
Application.persistentDataPath:此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。
android平台
Application.dataPath:&/data/app/xxx.xxx.xxx.apk Application.streamingAssetsPath:&jar:file:///data/app/xxx.xxx.xxx.apk/!/assets Application.persistentDataPath:&/data/data/xxx.xxx.xxx/files Application.temporaryCachePath:&/data/data/xxx.xxx.xxx/cache
Application.dataPath:&Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data Application.streamingAssetsPath:&Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw Application.persistentDataPath:&Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents Application.temporaryCachePath&Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches 从上面的3张表格,我们可以看到 dataPath和streamingAssetsPath的路径位置一般是相对程序的安装目录位置,而
persistentDataPath和temporaryCachePath的路径位置一般是相对所在系统的固定位置
简单介绍一下unity3d中资源的处理种类(欢迎拍砖):
小匹夫遇到过的大体就是如下几种了,Resources、StreamingAssets、AssetBundle、PersistentDataPath,下面简单分析一下。
Resources:
是作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打
到发布包中。它的特点简单总结一下就是:
1只读,即不能动态修改。所以想要动态更新的资源不要放在这里。 2会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有
利于减小资源包的大小。 3主线程加载。 资源读取使用Resources.Load()。
StreamingAssets:
要说到StreamingAssets,其实和Resources还是蛮像的。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,
那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此
StreamingAssets主要用来存放一些二进制文件。下面也同样做一个简单的总结:
1同样,只读不可写。 2主要用来存放二进制文件。 3只能用过WWW类来读取
AssetBundle:
简而言之就是把prefab或者二进制文件封装成AssetBundle文件(也是一种二进制)。但是也有硬伤,就是在移动端无法更新脚本。下
面简单的总结下:
1是Unity3D定义的一种二进制类型。 2最好将prefab封装成AseetBundle,不过上面不是才说了在移动端无法更新脚本吗?那从Assetbundle中拿到的Prefab上挂的脚本是不
是就无法运行了?也不一定,只要这个prefab上挂的是本地脚本,就可以。 3使用WWW类来下载。
PersistentDataPath:
看上去它只是个路径呀,可为什么要把它从路径里面单独拿出来介绍呢?因为它的确蛮特殊的,这个路径下是可读写。而且在IOS上就
是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项
Write Access,可以设置它的路径是沙盒还是sdcard。下面同样简单的总结一下:
1内容可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。 2无内容限制。你可以从 StreamingAsset 中读取二进制文件或者从 AssetBundle 读取文件来写入 PersistentDataPath 中。 3写下的文件,可以在电脑上查看。同样也可以清掉。
移动平台读取外部文件的方法
上文小匹夫之所以要介绍Resources、StreamingAssets、AssetBundle、PersistentDataPath这四个东东,就是因为读取外部资源的操
作所涉及到的东西无外乎这几种。既然是用Unity3D来开发游戏,那么自然要使用Unity3D规定的操作方式,而不是我们在PC上很原始的
那种操作方式来操作咯。否则就会像本文一开始所演示的那样,写出移动端无法使用的很傻的代码来。
下面小匹夫就分别实现一下利用Resources、StreamingAssets、AssetBundle来读取的过程。
Resources:
private string _ &// Use this for initialization &void Start () { &&LoadXML("Test"); &} &// Update is called once per frame &void Update () { &} &private void LoadXML(string path) &{ &&_result = Resources.Load(path).ToString(); &&XmlDocument doc = new XmlDocument(); &&doc.LoadXml(_result); &} &void OnGUI() &{ &&GUIStyle titleStyle = new GUIStyle();& &&titleStyle.fontSize = 20;& &&titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);& &&GUI.Label(new Rect(400, 10, 500, 200),& _result,titleStyle); &}
StreamingAssets:
同Resources一样,我们要新建一个StreamingAssets的文件夹来存放我们的Test.xml文件。如图: 不过前文已经说了,StreamingAssets文件夹内的东西并不会被压缩和加密,而是放进去什么就是什么,所以一般是要放二进制文件的
,这里小匹夫仅仅做一个演示,各位在实际操作中切记不要直接把数据文件放到这个目录中打包。
private string _ &// Use this for initialization &void Start () { &&StartCoroutine(LoadXML()); &} &// Update is called once per frame &void Update () { &} &/// &summary& &/// 如前文所述,streamingAssets只能使用www来读取, &/// 如果不是使用www来读取的同学,就不要问为啥读不到streamingAssets下的内容了。 &/// 这里还可以使用了persistenDataPath来保存从streamingassets那里读到内容。 &/// &/summary& &IEnumerator LoadXML() &{ &&string sPath= Application.streamingAssetsPath + "/Test.xml"; &&WWW www = new WWW(sPath); && &&_result = www. &} &void OnGUI() &{ &&GUIStyle titleStyle = new GUIStyle();& &&titleStyle.fontSize = 20;& &&titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);& &&GUI.Label(new Rect(400, 10, 500, 200),& _result,titleStyle); &}
AssetBundle:
来到AssetBundle,这里就和上面两个不一样了。首先我们要把我们的文件Test.xml打成AssetBundle文件,由于小匹夫使用的是小米3
作为测试机,所以AssetBundle的平台选择为Andorid。
如图,我们创建了一个AssetBundle文件,并命名为TextXML。并且按照二进制文件放入StreamingAssets文件夹中的惯例,将这个
AssetBundle文件放入StreamingAssets文件夹。
private string _ &// Use this for initialization &void Start () { &&LoadXML(); &} &// Update is called once per frame &void Update () { &} &void LoadXML() &{ &&AssetBundle AssetBundleCsv = new AssetBundle(); &&//读取放入StreamingAssets文件夹中的bundle文件 &&string str = Application.streamingAssetsPath + "/" + "TestXML.bundle"; &&WWW www = new WWW(str); &&www = WWW.LoadFromCacheOrDownload(str, 0);& &&AssetBundleCsv = www.assetB &&string path = "Test"; &&TextAsset test = AssetBundleCsv.Load(path, typeof(TextAsset)) as TextA &&_result = test.ToString(); &} &void OnGUI() &{ &&GUIStyle titleStyle = new GUIStyle();& &&titleStyle.fontSize = 20;& &&titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);& &&GUI.Label(new Rect(400, 10, 500, 200),& _result,titleStyle); &}
阅读(...) 评论()Unity Assets目录下的特殊文件夹の用途-GAD腾讯游戏开发者平台Unity3D之脚本批量打包渠道包研究_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity3D之脚本批量打包渠道包研究
&&Unity3D之脚本批量打包渠道包研究
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢1144人阅读
unity基础总结(2)
Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以。比如目录:/xxx/xxx/Editor &和 /Editor 是一样的,无论多少个叫Editor的文件夹都可以。Editor下面放的所有资源文件或者脚本文件都不会被打进发布包中,并且脚本也只能在编辑时使用。一般呢会把一些工具类的脚本放在这里,或者是一些编辑时用的DLL。 比如我们现在要做类似技能编辑器,那么编辑器的代码放在这里是再好不过了,因为实际运行时我们只需要编辑器生成的文件,而不需要编辑器的核心代码。
2.Editor Default Resources
Editor Default Resources注意中间是有空格的,它必须放在Project视图的根目录下,如果你想放在/xxx/xxx/Editor Default Resources 这样是不行的。你可以把编辑器用到的一些资源放在这里,比如图片、文本文件、等等。它和Editor文件夹一样都不会被打到最终发布包里,仅仅用于开发时使用。你可以直接通过EditorGUIUtility.Load去读取该文件夹下的资源。
TextAssettext=EditorGUIUtility.Load(&test.txt&)asTextAsset;&&
Debug.Log(text.text);&&
我觉得这个文件夹其实没什么用处,如下代码所示它可以在Scene视图里给某个坐标绘制一个icon。它的好处是可以传一个Vecotor3 作为图片显示的位置。 参数2就是图片的名子,当然这个图片必须放在Gizmos文件夹下面。
&&&&voidOnDrawGizmos(){&&
&&&&&&&&Gizmos.DrawIcon(transform.position,&0.png&,true);&&
如果只想挂在某个游戏对象身上,那么在Inspecotr里面就可以直接设置。。
这里还是要说说OnDrawGizmos()方法,只要脚本继承了MonoBehaviour后,并且在编辑模式下就会每一帧都执行它。发布的游戏肯定就不会执行了,它只能用于在scene视图中绘制一些小物件。比如要做摄像机轨迹,那么肯定是要在Scene视图中做一个预览的线,那么用Gizmos.DrawLine 和Gizmos.DrawFrustum就再好不过了。
如果做手机游戏开发一般 andoird 或者 ios 要接一些sdk 可以把sdk依赖的库文件 放在这里,比如 .so .jar .a 文件。这样打完包以后就会自动把这些文件打在你的包中。
5.Resources
可以在根目录下,也可以在子目录里,只要名子叫Resources就可以。比如目录:/xxx/xxx/Resources &和 /Resources 是一样的,无论多少个叫Resources的文件夹都可以。Resources文件夹下的资源不管你用还是不用都会被打包进.apk或者.ipa
Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取。
Resources.LoadAssetAtPath() :它可以读取Assets目录下的任意文件夹下的资源,它可以在编辑时或者编辑器运行时用,它但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
AssetDatabase.LoadAssetAtPath():它可以读取Assets目录下的任意文件夹下的资源,它只能在编辑时用。它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
我觉得在电脑上开发的时候尽量来用Resource.Load() 或者 Resources.LoadAssetAtPath()&,假如手机上选择一部分资源要打assetbundle,一部分资源Resource.Load().那么在做.apk或者.ipa的时候 现在都是用脚本来自动化打包,在打包之前 可以用AssetDatabase.MoveAsset()把已经打包成assetbundle的原始文件从Resources文件夹下移动出去在打包,这样打出来的运行包就不会包行多余的文件了。打完包以后再把移动出去的文件夹移动回来。
6. StreamingAssets
这个文件夹下的资源也会全都打包在.apk或者.ipa 它和Resources的区别是,Resources会压缩文件,但是它不会压缩原封不动的打包进去。并且它是一个只读的文件夹,就是程序运行时只能读 不能写。它在各个平台下的路径是不同的,不过你可以用Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。
有些游戏为了让所有的资源全部使用assetbundle,会把一些初始的assetbundle放在StreamingAssets目录下,运行程序的时候在把这些assetbundle拷贝在Application.persistentDataPath目录下,如果这些assetbundle有更新的话,那么下载到新的assetbundle在把Application.persistentDataPath目录下原有的覆盖掉。
因为Application.persistentDataPath目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,直到应用程序在手机上安装完毕才有这个目录。
StreamingAssets目录下的资源都是不压缩的,所以它比较大会占空间,比如你的应用装在手机上会占用100M的容量,那么你又在StreamingAssets放了一个100M的assetbundle,那么此时在装在手机上就会在200M的容量。
7.隐藏文件夹
以.(点)开头的文件夹会被Unity忽略。在这种文件夹中的资源不会被导入,脚本不会被编译。也不会出现在Project视图中。
8.WebPlayerTemplates
用来替换web build的默认网页。这个文件夹中的脚本都不会被编译。这个文件夹必须作为Assets文件夹的直接子目录。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8890次
排名:千里之外
评论:10条unity发布web后,怎么获取StreamingAssets文件夹的路径呢?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:74,270贴子:
unity发布web后,怎么获取StreamingAssets文件夹的路径呢?收藏
在unity里可以使用Application.streamingAssetsPath可以获取到。但是发布后,放在某个位置上,是不行的。是不是这个Application.streamingAssetsPath是不对的呢?
关注逆鳞小说吧,并且捧场5000及以上T豆,支持柳大~,
大神们,求指点一下~~
关注逆鳞小说吧,并且捧场5000及以上T豆,支持柳大~,
public static string path = &file://& + Application.dataPath + &/StreamingAssets/& + &ALL.assetbundle&;可还是不对。求路过的大神来指点一下~~
关注逆鳞小说吧,并且捧场5000及以上T豆,支持柳大~,
发布的话用
Application.persistentDataPathApplication.streamingAssetsPath 平台通用性不好,可以调试的时候用
不可能使用。web运行在沙箱中,不能对电脑本地进行任何操作。发布到网上,他不能对服务器或本地进行任何操作,都不行。
楼主解决了没有,我遇到同样的问题,求共享解决方案
登录百度帐号推荐应用}

我要回帖

更多关于 在文件夹中搜索文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信