Unity笔记—9(Unity常用API整理之路径及文件操作)

8 篇文章 0 订阅
7 篇文章 1 订阅

Unity笔记—9(Unity常用API整理之路径及文件操作)



前言

自学笔记,没有历史知识铺垫(省略百度部分),系列性的记录核心的实用笔记,本章主要记录Unity中路径相关限制与操作以及文件操作的几种方式

一、多平台获取文件路径方法

Windows文件路径

Application.dataPath – /Assets
Application.streamingAssetsPath – /Assets/StreamingAssets
Application.persistentDataPath – C:/Users/xxxx/AppData/LocalLow/CompanyName/ProductName
Application.temporaryCachePath – C:/Users/xxxx/AppData/Local/Temp/CompanyName/ProductName

Mac文件路径

Application.dataPath – /Assets
Application.streamingAssetsPath – /Assets/StreamingAssets
Application.persistentDataPath – /Users/xxxx/Library/Caches/CompanyName/Product Name
Application.temporaryCachePath – /var/folders/57/6b4_9w8113x2fsmzx_yhrhvh0000gn/T/CompanyName/Product Name

IOS文件路径

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

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(编辑器文件使用目录)

Unity的开发资源存储目录,一般开发编辑器功能时使用,打包后目录消失

Application.streamingAssetsPath(只读目录)

对开发时的Assets/StreamingAssets目录进行读取操作,常用来存储二进制文件,且必须在打包前将文件存放进去
场景:游戏下载后首次运行,解压该目录下的二进制文件到可读写目录中(可离线减小游戏体积)

Application. persistenDataPath(可读写持久层目录)

可以将StreamingAssets下的二进制文件解压到此处进行本地读写操作,注意IOS中,如果该目录可以被icould自动上传,如果文件过多审核可能会被拒

Application.temporaryCachePath(可读写缓存目录)

可以将StreamingAssets下的二进制文件解压到此处进行本地读写操作,IOS中许多东西可以存到这里

二、Unity关键资源文件夹解读

Resources目录

该目录下的文件会被程序压缩打包,可以使用Resources类的静态方法直接读取使用内部资源

Resources静态方法

  1. FindObjectsOfTypeAll: --返回对象,预制件,材质,网格,纹理等列表。它还会列出内部对象,与Object.FindObjectsOfType相反,此函数还将列出禁用的对象。
  2. Load: – 加载指定的对象,预制件,材质,网格,纹理等,若找不到返回null
  3. LoadAll: – 返回指定类型或指定文件夹下的所有对象,预制件,材质,网格,纹理等列表。
  4. LoadAsync: – 异步加载指定资源或文件夹下的所有资源到ResourceRequest中
  5. UnloadAsset: – 从内存中卸载指定资源,再次加载时不会影响之前已使用的资源
  6. UnloadUnusedAssets: – 从内存中卸载未使用的资源

StreamingAssets目录

该目录下的文件不会被压缩和打包,原封携带,一般存放二进制文件,使用WWW(过时)或UnityWebRequest读取
常用方法:在首次启动游戏时将资源解压并copy到可读写的目录做持久化数据交互,Application.streamingAssetsPath的路径就是该目录
【Unity】关于各个平台加载streamingAssets路径

持久层目录

该目录下的文件是是可读写.
IOS中指应用程序的沙盒
Android中指程序的沙盒或者sdcard(打包时ProjectSetting中的Write Access可以设置)

  1. 只有在游戏运行时才可以读写,无法提前写入数据
  2. 可以使用UnityWebRequest操作数据
  3. 可以使用File API操作数据(安卓唯一可以使用File API操作的路径)

缓存目录

该目录下的文件是可读写的.(IOS该目录不会同步到icould)
查找的文档中表示该目录的操作与持久层目录类似,具体后续实验笔记

三、资源操作

WWW

需要在协程中使用,可以加载本地资源和远程资源,支持常用的HTTP协议等,该类的方法已过时,此处简单记录其用法

		WWW wWW = WWW(url);
        yield return wWW;
        if (wWW.error!=null)
        {
            Debug.Log(wWW.error);
            yield break;
        }
        Object result = wWW.**; //**为WWW支持的多种格式如文本/图片/ab等等

UnityWebRequest

Unity 推荐的网络/文件通讯操作方案

构造

无参构造默认无上传器和下载器(无法获得响应数据体),更多有参构造,支持传入url,请求方法,downloadHandler和uploadHandler

静态属性

  1. kHttpVerbCREATE: – CREATE字符串,请求方法
  2. kHttpVerbDELETE: – DELETE字符串,请求方法
  3. kHttpVerbGET: – GET字符串,请求方法(默认)
  4. kHttpVerbHEAD: – HEAD字符串,请求方法
  5. kHttpVerbPOST: – POST字符串,请求方法
  6. kHttpVerbPUT: --PUT字符串

成员属性

  1. certificateHandler: – 证书属性,为null时使用Unity的默认证书,自定义证书可参考CertificateHandler

  2. disposeCertificateHandlerOnDispose: – 默认为true,如果为true时连接到UnityWebRequest的所有证书都将拥有证书处理程序(自动调用)

  3. disposeDownloadHandlerOnDispose: – 默认为true,如果为true,则在调用UnityWebRequest.Dispose时,与此UnityWebRequest关联的所有DownloadHandler都会自动调用DownloadHandler.Dispose。

  4. disposeUploadHandlerOnDispose: – 默认为true,如果为true,则在调用UnityWebRequest.Dispose时,与此UnityWebRequest关联的所有UploadHandler都会自动调用UploadHandler.Dispose。

  5. downloadedBytes: – 返回系统已从远程服务器下载的主体数据的字节数(只读),如果UnityWebRequest没有下载处理程序,则此方法将始终返回零。

  6. downloadHandler: – 默认值为null,持有对DownloadHandler对象的引用,该对象管理此UnityWebRequest从远程服务器接收的主体数据,将此属性设置为null表示此UnityWebRequest不在乎响应的正文数据;所有接收到的身体数据将被忽略并丢弃。调用Send后不能更改此属性。

  7. downloadProgress: – 默认为true,如果为true,任何UploadHandler附加到此UnityWebRequest将有UploadHandler.Dispose时自动调用UnityWebRequest.Dispose被调用。如果没有UploadHandler附加到此UnityWebRequest,则此属性无效。

  8. error: – 默认值为null,描述此UnityWebRequest对象在处理HTTP请求或响应时遇到的任何系统错误。(只读)如果UnityWebRequest尚未遇到系统错误,则此属性将返回null。系统错误的示例包括套接字错误,解析DNS条目的错误或超出重定向限制。

    注意
    1.来自服务器的错误类型的返回码,例如404/File Not Found or 500/Internal Server Error(404 /找不到文件或500 /内部服务器错误),不被视为系统错误。
    2. 与WWW的区别,UnityWebRequest不适用error作为响应是否成功的判断

  9. isDone: – 返回true,在UnityWebRequest与远程服务器完成通信后返回。(只读)

    UnityWebRequest成功完成或遇到系统错误时,此属性将返回true。在此属性返回之前,将完成DownloadHandler的所有下载后处理(如果有)true。

  10. isHttpError: – 如果请求http错误将返回true,判断条件是响应码>=400

    通常与isNetworkError一起校验请求是否成功

  11. isModifiable: – UnityWebRequest配置属性可以被改变是返回true,配置属性包含 downloadHandler, method and url

  12. isNetworkError: – 系统错误的示例包括无法解析DNS条目,套接字错误或重定向限制返回true,该标识无法判断http响应嘛,响应码可以根据isHttpError判断

    通常与isHttpError一起校验请求是否成功

  13. method: – 定义请求方法,默认GET

  14. redirectLimit: – 设置重定向次数,默认32次,设置0表示拒绝重定向,负数表示不限制次数

  15. responseCode: – 返回请求结果的响应码,如200/404/500 ,-1表示未处理完响应

  16. result: – 请求的响应结果

  17. timeout: – 设置超时时间

  18. uploadedBytes: – 返回系统已上传到远程服务器的主体数据的字节数。(只读)
    如果此UnityWebRequest没有上载处理程序,则此属性将始终返回0

  19. uploadHandler: – 持有对UploadHandler对象的引用,该对象管理要上传到远程服务器的正文数据。将该属性设置为null表示此UnityWebRequest没有要上载的正文数据

  20. uploadProgress: – 返回介于0.0到1.0之间的浮点值,指示将主体数据上传到服务器的进度。

    如果UnityWebRequest完成(成功或系统错误),则此属性将始终返回1。
    如果UnityWebRequest仍在与远程服务器通信,而uploadHandler为null,则此属性将返回0。
    如果尚未调用发送,则此属性将返回-1。

  21. url: – 请求的地址,//表示网络请求, /表示Unity本地路径请求

  22. uri: – 与url相同,但验证和预处理较少,因此设置速度更快。但是,由于创建了新的Uri实例,因此读取它的值会更加昂贵,因此,如果您想获取最终请求的URL,建议使用url,除非您需要Uri对象。

  23. useHttpContinue: – 默认true,确定这个UnityWebRequest是否包括Expect:100-继续在其传出的请求头中。(默认值:true)。

    100 Continue响应代码旨在允许远程服务器在客户端传输完整的请求主体之前,根据请求的标头决定是否接受请求。
    如果设置为true,则此UnityWebRequest将Expect: 100-Continue在初始出站请求中包含标头
    如果设置为false,Expect将发送一个空的头

静态方法

  1. ClearCookieCache: – 清除缓存中的cookie

    Cookie缓存仅存在于当前游戏会话中,下次启动游戏时将为空。下面列出了例外情况。此方法使您可以从缓存中删除cookie。如果不指定参数,则该方法将删除缓存中的所有cookie。如果确实指定了字符串参数,则该方法仅删除适用于给定URL的cookie。iOS具有系统提供的内置cookie缓存,该缓存在游戏会话之间保持不变。此方法从该内置缓存中删除cookie。在WebGL上,Cookie由浏览器管理,无法删除,因此此方法不会执行任何操作。

  2. Get/Post/Put/Head/Delete: – 创建不同请求方法的请求
  3. EscapeURL: – url字符编码器功能
  4. GenerateBoundary: – 生成一个包含40个随机byte的数组,一般用于表单边界之类使用
  5. SerializeFormSections: – 将表单数据和边界数组合起来返回byte数组流
  6. SerializeSimpleForm: – 将表单数据序列化为url格式参数
  7. UnEscapeURL: – url字符解码器功能

成员方法

  1. Abort: – 立刻终止请求

    isNetworkError返回true
    isHttpError返回true
    error返回"User Aborted"

  2. Dispose: – 表示不再使用此UnityWebRequest,并应清除其正在使用的所有资源。无论成功还是失败都需要调用
  3. GetRequestHeader: – 获取请求头信息
  4. GetResponseHeader: – 获取响应头信息
  5. GetResponseHeaders: – 获取响应头信息列表
  6. SetRequestHeader: – 设置请求头
  7. SendWebRequest: – 发送请求,在每个实例只能调用一次,调用后无法修改实例的部分配置(核心方法)
	//网络请求
    private IEnumerator LoadDony15() {

        UnityWebRequest requestClient =  UnityWebRequest.Get("https://dony15.cn/");
        yield return requestClient.SendWebRequest();

        if (requestClient.isNetworkError || requestClient.isHttpError)
        {
            Debug.Log(requestClient.error);
            yield break;
        }
        else {
            Debug.Log(requestClient.downloadHandler.text);
        }
        requestClient.Dispose();
    }
	//本地文件
    private IEnumerator LoadLocalText() {

        string path = Path.Combine(Application.streamingAssetsPath, "test.txt");
        UnityWebRequest requestClient = UnityWebRequest.Get(path);
        yield return requestClient.SendWebRequest();

        if (requestClient.isNetworkError || requestClient.isHttpError)
        {
            Debug.Log(requestClient.error);
        }
        else
        {
            Debug.Log(requestClient.downloadHandler.text);
        }
        requestClient.Dispose();
    }

System.IO.File

需要与Unity中的UnityEngine.Windows.File(win平台的文件操作)区别开,二者不是一个东西

  1. File.Exists(@“路径”): – 判断文件是否存在,返回一个bool值

  2. File.Move(@“路径1”,@“路径2”): – 移动文件到指定位置(可改名)

  3. File.Copy(@“路径1”,@“路径2”): – 复制文件到指定位置(可改名)

  4. File.Delete(@“路径”): – 删除文件

  5. File.Create(@“路径”): – 创建文件

  6. File.ReadAllLines(@“路径”): – 读取一个文本文件,返回一个字符串数组

  7. File.ReadAllText(@“路径”): – 读取一个文本文件,返回一个字符串

  8. File.ReadAllBytes(@“路径”): – 读取一个文件,返回字节数组

  9. File.WriteAllLines(@“路径”): – 将一串字符串数组写入到一个文本文件,会覆盖源文件。

  10. File.WriteAllText(@“路径”): – 将一串字符串写入到一个文本文件中,会覆盖源文件。

  11. File.WriteAllBytes(@“路径”): – 将一个字节数组写入到一个文本文件中,会覆盖源文件。

  12. File.AddAllText(@“路径”): – 将一个字符串写入到一个文本文件中,不会覆盖源文件。

  13. File.AddAllLines(@“路径”): – 将一串字符串数组写入到一个文本文件,不覆盖源文件。

  14. File.AddAllBytes(@“路径”): – 将一个字节数组写入到一个文本文件中,不覆盖源文件。

  15. 更多方法查看源码即可,与大多数编程语言的文件操作类似

//Encoding.Default使用系统默认编码
string[] str = File.ReadAllLines(@"path\test.txt",Encoding.Default);

//将一个任意类型的文件复制到其他位置
byte[] bt = File.ReadAllBytes(@"path\test.txt");
File.WriteAllBytes(@"path2\test.txt",bt);

System.IO.FileInfo

查看源码即可,与File方法类似,通过方法名即可了解如何使用

File和FileInfo比较

File类是静态类

优点:调用简单,建议简单操作以及调用次数少时使用
缺点:始终消耗CPU资源

FileInfo类是实例类

优点:调用完就释放CPU资源,建议对一个文件进行大量的操作或者封装时使用
缺点:操作复杂

四、AssetsBundle

资源捆绑包,又称AB包
1.减小下载包的提及
2.远程版本迭代,bug更新

详细AB的分组规范/打包/载入使用方法后续单独学习记录
Unity AssetsBundle从入门到精通
AssetsBundle分组策略总结

五、相关干货贴

【Unity系统知识】之unity文件操作路径
Unity3D学习笔记(二十五):文件操作


总结

本章主要记录路径相关限制与操作以及文件操作的几种方式

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值