unity3D技术分享

unity路径特点写法和文件读写全攻略

2020-07-26  本文已影响0人  GameObjectLgy

1、Unity中各路径和目录的对应关系

image.png

其中,安卓中的路径是有两种分支的


image.png

在打包面板中,有个Write Access
当我们选择Internal Only就是表示沙盒路径,/data/data/com.xxx.xxx/
对应的Android方法为 getFilesDir()
当我们选择SDCard时就表示存储到SD卡上,: /storage/emulated/0/Android/data/com.example.myapplication/files

2、各个路径的特点

Resources

是作为一个Unity的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中。
特点:

StreamingAssets

StreamingAssets和Resources很像。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此StreamingAssets主要用来存放一些二进制文件。
特点:

PersistentDataPath

这个路径下是可读写。而且在IOS上就是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项Write Access,可以设置它的路径是沙盒还是sdcard。
特点:
-可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。

Application.DataPath

注意移动端是没有访问权限的

3、Unity文件的读写方式

using UnityEngine;  
using System.Collections;  
using System.Collections.Generic;  
using System.IO;  
public class FileOperate : MonoBehaviour {  
    public void WriteFileByLine(string file_path,string file_name,string str_info)  
    {  
        StreamWriter sw;  
        if(!File.Exists(file_path+"//"+file_name))  
        {  
            sw=File.CreateText(file_path+"//"+file_name);//创建一个用于写入 UTF-8 编码的文本  
            Debug.Log("文件创建成功!");  
        }  
        else  
        {  
            sw=File.AppendText(file_path+"//"+file_name);//打开现有 UTF-8 编码文本文件以进行读取  
        }  
        sw.WriteLine(str_info);//以行为单位写入字符串  
        sw.Close ();  
        sw.Dispose ();//文件流释放  
    }  
    void Start()  
    {  
        WriteFileByLine (Application.persistentDataPath,"my_newfile.txt","信息");  
    }  
}  

FileInfo方式

public void WriteFileByLine(string file_path,string file_name,string str_info)  
    {  
        StreamWriter sw;  
        FileInfo file_info = new FileInfo (file_path+"//"+file_name);  
        if(!file_info.Exists)  
        {  
            sw=file_info.CreateText();//创建一个用于写入 UTF-8 编码的文本  
            Debug.Log("文件创建成功!");  
        }  
        else  
        {  
            sw=file_info.AppendText();//打开现有 UTF-8 编码文本文件以进行读取  
        }  
        sw.WriteLine(str_info);  
        sw.Close ();  
        sw.Dispose ();//文件流释放  
    }  

4、Unity路径解疑

上面了解各个路径的特性,读写方式,但是还有一个经常容易犯错的地方,就是路径的写法。
Unity3D关于路径资源的调用分为绝对路径和相对路径,

安卓下:
"file://" + Application.streamingAssetsPath + "\TestFile\Cat\" + Number + ".png";
"file://" + Application.PersistentDataPath+ "\TestFile\Cat\" + Number + ".png";
或者"file://" + Path.Combine(Application.persistentDataPath, fillName);
总之,路径写法的东西,不行就多是一两次就好了。

上一篇 下一篇

猜你喜欢

热点阅读