unity3d各平台的路径问题

来源:互联网 发布:网络招生技巧 编辑:程序博客网 时间:2024/06/08 07:37
欢迎加入U3D交流群,群号码:308093702~~~~
前几天我做项目测试,需要获取保存拍的照片,在unity3d中,路径总是没什么问题的,但是在移动平台上,经查发现Application.temporaryCachePath和Application.persistentDataPath返回空字符串。便花时间认真研究了一下Unity3D的路径问题。我们常用的是以下四个路径:
Application.dataPath 
Application.streamingAssetsPath 
Application.persistentDataPath 
Application.temporaryCachePath 
根据测试,详细情况如下:
一.在项目根目录中创建Resources文件夹来保存图片
可以使用Resources.Load("文件名字,注:不包括文件后缀名");把文件夹中的对象加载出来。
注:此方可实现对文件实施“增删查改”等操作,但打包后不可以更改了。

二.直接放在项目根路径下来保存文件
在直接使用Application.dataPath来读取文件进行操作。
注:移动端是没有访问权限的。

三.在项目根目录中创建StreamingAssets文件夹来保存文件。
1.可以使用Application.dataPath来读取文件进行操作。
[C#]
#if UNITY_EDITOR
string filepath=Application.dataPath+"/StreamingAssets"+"/photo.jpg";
#elif UNITY_IPHONE
string filepath=Application.dataPath+"/Ray"+"/photo.jpg";
#elif UNITY_android
string filepath="jar:file://"+Application.dataPath+"!/assets/"+"/photo.jpg";
#endif
2.直接使用Application.streamingAssetsPath来读取文件进行操作。
注:此方法在pc/Mac电脑中可以实现对文件实施“增删查改”等操作,但在移动端只支持读取操作。

四.使用Application.streamingAssetsPath来操作文件(荐)。
改文件存在手机沙盒中,因为不能直接存放文件,
1.通过服务器直接下载保存到该位置,也可以通过Md5码比对下载更新新的资源
2.没有服务器的,只有间接通过文件流的方式从本地读取并写入Application.persistentDataPath文件下,然后在通过Application.persistentDataPath来读取操作。
注:在Pc/Mac电脑以及Android跟Ipad、iphone都可对文件进行任意操作,另外在IOS上对该目录下的东西可以被iCloud自动备份。

五.使用Application.temporaryCachePath来操作文件
操作方式跟上面Application.persistentDataPath类似。除了在IOS上不能被iCloud自动备份。

下图是几种文件在Pc中路径的具体位置



unity路径的使用以及注意点都总结了,现在还是送点干粮给大家吧,都是开发中常用的东西
1.对文件的操作类,主要就是文流读取操作的一些东西

C#
//照片变量
public GameObject[] Images;

/// <summary>
/// 协程为照片变量赋值(图片)
/// </summary>
/// <returns></returns>
IEnumerator LoadWWWAllPicture()
{
//获取路径下的照片
string[] streamingPath = Directory.GetFiles(Application.persistentDataPath + "/");
for (int i = 0, j = 0; i < streamingPath.Length; i++, j++)
{
WWW www = new WWW("file:///" + streamingPath[i]);
yield return www;

if (www.isDone && www != null)
{
Images[j].GetComponent<UITexture>().mainTexture = www.texture;
//为获取到的图片赋上名字
Images[j].GetComponent<UITexture>().mainTexture.name = streamingPath[i];
Debug.Log(Images[j].GetComponent<UITexture>().mainTexture.name);
www.Dispose();
}
}
}
原创粉丝点击