Unity资源路径与读取

Unity资源路径有:

1、StreamingAssets:只读,一般用于存放应用程序运行时需要加载的资源文件,可以通过Application.streamingAssetsPath来获取。

2、PersistentDataPath:可读写,一般用于存放应用程序运行时生成或下载的文件,可以通过Application.persistentDataPath来获取。

3、DataPath:应用程序的安装目录,它包含了应用程序的可执行文件和默认资源文件,可以通过Application.dataPath来获取。

4、TemporaryCachePath:临时缓存目录,用于存放临时文件,可以通过Application.temporaryCachePath来获取。

不同平台中资源路径的实际路径是不一样的,可参考下表:

|---------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| api: | Application.dataPath | Application.streamingAssetsPath | Application.persistentDataPath |
| Windows | 例:C:/Projects/YourProject/ Assets | 例: C:/Projects/YourProject/ Assets/StreamingAssets | 例: C:/Users/YourUsername/AppData/ LocalLow/CompanyName/ YourProjectName |
| iOS | 例: /var/containers/Bundle/ Application/AppId/ YourProjectName.app/ Data | 例: /var/containers/Bundle/ Application/AppId/ YourProjectName.app/ Data/Raw/ StreamingAssets | 例: /var/mobile/Containers/Data/ Application/AppId/Documents |
| Android | 例: /data/app/com. companyname. yourprojectname-1/base.apk | 例: /data/app/com. companyname. yourprojectname-1/base.apk!/assets | 例: /storage/emulated/0/Android/ data/com.companyname. yourprojectname/files |

上面的路径是相对路径,并不是具体的文件路径。具体的文件路径会根据应用程序安装位置而变化。所以要保证不出错,我们在读写资源的时候,最好的办法就是使用代码的API方法(即上表行一)创建资源路径和读取资源。

在Windows、iOS、Android和Mac等平台上,读取这些资源路径可以使用WWW类、UnityWebRequest类或者File类来进行读取,不过需要注意的是,在Android平台上,StreamingAssets路径下的文件是压缩的,无法直接使用File类读取,需要使用WWW类或UnityWebRequest类来进行读取。如:

复制代码
string filePath1 = Path.Combine(Application.streamingAssetsPath, "filename.txt");
string filePath2 = Path.Combine(Application.persistentDataPath, "filename.txt");
string filePath3 = Path.Combine(Application.dataPath, "filename.txt");


#if UNITY_ANDROID && !UNITY_EDITOR
// 在Android平台上,StreamingAssets路径下的文件是压缩的,需要使用WWW类来读取
StartCoroutine(LoadFile(filePath1));

#else
// 在其他平台上,可以直接使用File类来读取
string files1= File.ReadAllText(filePath1);
string files2= File.ReadAllText(filePath2);
string files3= File.ReadAllText(filePath3);
#endif

// 在Android平台上使用WWW类读取StreamingAssets路径下的文件
private IEnumerator LoadFile(string filePath)
{
    using (UnityWebRequest www = UnityWebRequest.Get(filePath))
    {
        yield return www.SendWebRequest();
        if (www.result == UnityWebRequest.Result.Success)
        {
            string fileContent = www.downloadHandler.text;
            Debug.Log(fileContent);
        }
        else
        {
            Debug.LogError("Failed to load file: " + www.error);
        }
    }
}
相关推荐
zxc2446039341 小时前
gpu instancer crowd 使用自定义材质并且只修改单个物体的材质参数
unity·材质
伽蓝_游戏6 小时前
UGUI源码剖析(3):布局的“原子”——RectTransform的核心数据模型与几何学
ui·unity·架构·c#·游戏引擎·游戏程序·几何学
Kingsdesigner11 小时前
游戏开发流程革命:我用Substance插件,在UE5内实现材质的实时“创世纪”
游戏·adobe·ue5·游戏引擎·游戏开发·设计师·substance 3d
污领巾11 小时前
虚幻GAS底层原理解剖七 (ASC)
游戏引擎·php·虚幻
污领巾11 小时前
虚幻GAS底层原理解剖四 (TAG)
游戏引擎·虚幻
YF云飞11 小时前
从愤怒的小鸟来看Unity武器拖尾的特效优化
游戏·unity
污领巾1 天前
虚幻GAS底层原理解剖二 (GE)
游戏引擎·虚幻
南無忘码至尊1 天前
Unity编辑器工具:一键为场景中所有MeshRenderer对象添加指定脚本
unity·c#·游戏引擎·游戏开发
枯萎穿心攻击1 天前
算法入门第一篇:算法核心:复杂度分析与数组基础
算法·unity·矩阵·c#·游戏引擎
王维志2 天前
Unity轻量观察相机
unity·游戏引擎