【unity小技巧】在 Unity 中,Application获取各种文件路径或访问不同类型的存储路径
文章目录
- 前言
- 1. **`Application.persistentDataPath`**
- 2. **`Application.dataPath`**
- 3. **`Application.streamingAssetsPath`**
- 4. **`Application.temporaryCachePath`**
- 5. **`Application.consoleLogPath`**
- 6. **`Application.userDataPath`**
- 7. **`Application.streamingAssetsPath` 与 `UnityWebRequest` 结合使用(Android & iOS)**
- 小结:
- 完结
前言
在 Unity 中,获取文件路径或访问不同类型的存储路径是一个常见需求。Unity 提供了几个常用的 API 用于不同平台的文件路径获取。以下是一些常见的路径获取方法:
1. Application.persistentDataPath
persistentDataPath 提供了一个可以在应用生命周期内存储用户数据的路径,通常用于存储用户生成的文件或应用的持久化数据。这是一个跨平台的路径,适合存放需要长期保存的文件。
- 用例:保存玩家的游戏数据、设置文件等。
- 位置:
- Windows:
C:\Users\[Username]\AppData\LocalLow\[CompanyName]\[ProductName] - Mac:
/Users/[Username]/Library/Application Support/[CompanyName]/[ProductName] - Android:
/data/data/[PackageName]/files - iOS:
/var/mobile/Containers/Data/Application/[GUID]/Documents
- Windows:
string path = Application.persistentDataPath;
Debug.Log("Persistent Data Path: " + path);
2. Application.dataPath
dataPath 是应用程序的根目录路径,用于访问和存储游戏的 Assets 文件夹中的文件。这在编辑器中有效,特别是在开发阶段,但在构建后的应用中,通常不会直接用于存储持久数据。
- 用例:访问资源文件、读取游戏包内的文件。
- 位置:
- Windows:
[ProjectFolder]\Assets - Mac:
[ProjectFolder]/Assets - Android/iOS:
[APK/iOS包]中的内嵌资源文件夹
- Windows:
string path = Application.dataPath;
Debug.Log("Data Path: " + path);
3. Application.streamingAssetsPath
Application.streamingAssetsPath指向 Unity 项目中 StreamingAssets 文件夹的位置。StreamingAssets 是一个特殊的文件夹,用于存放在游戏运行时需要的资源文件(如视频、音频文件或大型数据文件)。StreamingAssets文件夹需要自己手动去添加(只读,一般放配置文件)
它的主要特点是:
- 在 编辑器模式 下,你可以自由地添加、删除、修改文件。
- 在 打包后的游戏 中,StreamingAssets 目录会被保留在最终的游戏包内(如 .apk、.exe 等)。这些文件会变成只读模式,意味着你不能在运行时直接修改它们。
Android 和 iOS:在这两个平台上,StreamingAssets 中的文件实际上是包含在 APK 或应用包中的,因此它们的路径在这些平台上可能需要通过 Web 请求来访问,而不能直接通过文件系统访问。
PC 和 Mac:在桌面平台上,StreamingAssets 文件夹中的文件会直接存储在构建文件夹中,可以像常规文件一样读取。
- 用例:StreamingAssets 文件夹中的内容不会经过 Unity 的资源压缩和优化过程,因此可以直接以原始格式存储在最终的构建文件中,供游戏在运行时读取。这使得它成为存储游戏资源(如大文件或配置文件)的理想位置,特别是当这些文件不需要经过 Unity 引擎的资源管理系统进行处理时。。
- 位置:
- Windows/Mac:
[ProjectFolder]/Assets/StreamingAssets - Android:
jar:file://[APK]/assets/ - iOS:
[AppBundle]/StreamingAssets/
- Windows/Mac:
string path = Application.streamingAssetsPath;
Debug.Log("Streaming Assets Path: " + path);
4. Application.temporaryCachePath
temporaryCachePath 返回临时缓存文件的路径,适合存放一些不需要长期保存的数据。数据可能会在应用关闭后删除。
- 用例:存储临时缓存数据,网络下载内容等。
- 位置:
- Windows:
C:\Users\[Username]\AppData\Local\Temp - Mac:
/tmp - Android/iOS:应用沙箱的临时缓存文件夹。
- Windows:
string path = Application.temporaryCachePath;
Debug.Log("Temporary Cache Path: " + path);
5. Application.consoleLogPath
consoleLogPath 用于获取 Unity 控制台日志文件的存储路径,主要用于调试和开发时查看日志文件。
- 用例:获取 Unity 控制台的日志文件路径。
- 位置:
- Windows:
C:\Users\[Username]\AppData\LocalLow\Unity\Editor\Editor.log - Mac:
~/Library/Logs/Unity/Editor.log
- Windows:
string path = Application.consoleLogPath;
Debug.Log("Console Log Path: " + path);
6. Application.userDataPath
userDataPath 是用户数据文件夹的路径,通常用于存储与用户相关的个性化数据和设置。
- 用例:存储用户的自定义数据、配置文件等。
- 位置:
- Windows:
C:\Users\[Username]\AppData\LocalLow\[CompanyName]\[ProductName] - Mac:
/Users/[Username]/Library/Application Support/[CompanyName]/[ProductName] - Android/iOS:应用沙箱路径下。
- Windows:
string path = Application.userDataPath;
Debug.Log("User Data Path: " + path);
7. Application.streamingAssetsPath 与 UnityWebRequest 结合使用(Android & iOS)
当在 Android 或 iOS 平台上访问 StreamingAssets 中的资源时,通常需要通过 UnityWebRequest 来读取文件,特别是在 Android 中,StreamingAssets 的内容被打包进 APK 中。
using UnityEngine;
using UnityEngine.Networking;public class StreamingAssetsExample : MonoBehaviour
{void Start(){string path = Application.streamingAssetsPath + "/example.json";if (Application.platform == RuntimePlatform.Android){StartCoroutine(LoadStreamingAssetAndroid(path));}else{StartCoroutine(LoadStreamingAsset(path));}}// 适用于PC、Mac等平台private IEnumerator LoadStreamingAsset(string path){UnityWebRequest www = UnityWebRequest.Get(path);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success){Debug.Log("File Content: " + www.downloadHandler.text);}else{Debug.Log("Error: " + www.error);}}// 适用于Android平台private IEnumerator LoadStreamingAssetAndroid(string path){UnityWebRequest www = UnityWebRequest.Get("jar:file://" + path);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.Success){Debug.Log("File Content: " + www.downloadHandler.text);}else{Debug.Log("Error: " + www.error);}}
}
小结:
Application.persistentDataPath:适用于存储持久性数据。Application.dataPath:适用于访问应用的数据资源文件夹。Application.streamingAssetsPath:特别适合存储一些在运行时需要直接读取的文件,一般放配置文件Application.temporaryCachePath:适用于存储临时缓存数据。Application.consoleLogPath:用于获取控制台日志文件路径。Application.userDataPath:存储与用户相关的个性化数据路径。
这些路径提供了在不同平台上处理文件和资源的方式,适合开发中不同的需求。
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
好了,我是向宇,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

相关文章:
【unity小技巧】在 Unity 中,Application获取各种文件路径或访问不同类型的存储路径
文章目录 前言1. **Application.persistentDataPath**2. **Application.dataPath**3. **Application.streamingAssetsPath**4. **Application.temporaryCachePath**5. **Application.consoleLogPath**6. **Application.userDataPath**7. **Application.streamingAssetsPath 与 …...
c++:timer
1.设置休眠时间sleep_for 添加头文件 #include <thread> #include <iostream> #include <chrono> #include <thread>int main(int argc, char const *argv[]) {// 休眠2秒std::this_thread::sleep_for(std::chrono::seconds(2));// 休眠500毫秒std:…...
VSCode(四)CMake调试
1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…...
安装Docker并使用WSL
引言 Windows Subsystem for Linux (WSL) 是一个在Windows上运行Linux二进制可执行文件(ELF格式)的兼容层。它允许开发者直接在Windows上运行Linux环境,而无需使用虚拟机。Docker是一个开源的应用容器引擎,它允许开发者打包应用以…...
HCIA-openGauss_2_2连接与认证
设置客户端认证策略 设置配置文件参数 gssql客户端连接-确定连接信息 客户端工具通过数据库主节点连接数据库,因此连接前,需要获取数据库主节点的在服务器的IP地址及数据库主节点的端口号信息。 步骤1:以操作系统用户omm登录数据库主节点。…...
安装 pytorch lighting
1 搜寻配对版本 进入lighting官网,查看配对版本 比如我就选择Python3.11、torch2.4、lightning2.4.0 2 搜寻pytorch安装命令 进入pytorch官网,查看以前版本的下载命令 注意要选择是 gpu版本的pytorch查看自己显卡驱动命令:nvidia-smi查看…...
2024年12月7日历史上的今天大事件早读
1732年12月07日英国皇家大剧院在伦敦开幕 1798年12月07日清代诗人袁枚逝世 1889年12月07日第一个充气轮胎受专利保护 1916年12月07日劳合-乔治出任英国首相 1926年12月07日第一台电冰箱受美国专利保护 1937年12月07日南京保卫战正式打响 1941年12月07日日本偷袭珍珠港 1…...
ORB-SLAM2 ---- 非线性优化在SLAM中的应用(一)
文章目录 一、为什么要讲非线性优化二、运动模型和观测模型三、最大似然估计四、SLAM中最小二乘的应用五、总结 一、为什么要讲非线性优化 相信大家在学习一段时间SLAM后,会发现两个问题。第一个是代码能看懂,但是不知道为什么这样做(特别是优…...
FastAPI中创建一个多App架构
1. 创建项目结构 首先,设计一个合理的项目结构。这里以三个Apps为例:users、items 和 orders。2. 项目结构 my_fastapi_project/ ├── main.py ├── app/ │ ├── __init__.py │ ├── users/ │ │ ├── __init__.py │ │ ├─…...
计算机网络原理之HTTP与HTTPS
一、前言 为了理解HTTP,我们有必要事先了解一下TCP/IP协议簇。 通常我们使用的网络(包括互联网)是在TCP/IP协议簇的基础上运作的。而HTTP属于它内部的一个子集。 计算机与网络设备要相互通信,双方必须基于相同的方法。比如&#…...
完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)
基本上完全按照手册来的,除了Ubuntu虚拟机使用了22.04 Jammy版本,鸿蒙手册里是20.04 版本,主要是鸿蒙里3年前的手册了,所以就擅自用了高版本。 据此还想到一点,鸿蒙LiteOS,还挺稳定的,3年也没有…...
vsphere vcenter web 界面的介绍
这是主页的页面...
【pyspark学习从入门到精通23】机器学习库_6
目录 分割连续变量 标准化连续变量 分类 分割连续变量 我们经常处理高度非线性的连续特征,而且只用一个系数很难拟合到我们的模型中。 在这种情况下,可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时,将值划分到离散的桶中…...
FPGA实战篇(呼吸灯实验)
1.呼吸灯简介 呼吸灯采用 PWM 的方式,在固定的频率下,通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM(Pulse Width Modulation ),即脉冲宽度调制,它利用微处理器输出的 PWM 信号,实现对…...
面经自测——自我介绍
前言 这是作者新开的坑,一切题目都是从网上找的原题,为了总结网上有关的面经,以便在真实面试中较为流利的回答面试官的问题 面试之——自我介绍 自我介绍是面试中最常见的问题之一,主要目的是让面试官了解你的背景、技能和职业…...
在 LS-DYNA 中将应力转换为用户定义的坐标系
介绍 通常,使用 LS-DYNA 或 Ansys Mechanical 等仿真工具解决工程问题需要将张量结果与解析解进行比较。一个这样的例子是加压圆柱体,其中圆周应力或环状应力是感兴趣的主要应力度量。例如,如果对具有复杂端部处理的几何结构进行此类仿真&am…...
【Spark】 groupByKey与reduceByKey的区别
groupByKey 操作:将相同键的所有值收集到一个集合中。实现:不会在map端进行局部聚合,而是直接将所有相同键的数据传输到reduce端进行聚合。缺点:由于没有本地聚合,groupByKey会导致大量的数据传输和shuffle,…...
数据库与数据库管理系统概述
title: 数据库与数据库管理系统概述 date: 2024/12/7 updated: 2024/12/7 author: cmdragon excerpt: 在信息化迅速发展的时代,数据已成为企业和组织的重要资产。数据库与数据库管理系统(DBMS)是高效存储、管理和利用数据的核心工具。本文首先定义了数据库的基本概念和特…...
(简单5步实现,免费且比GPT4.0更好用)部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型
摘要: 本文将指导您如何部署一个本地AI大语言模型聊天系统,使用Chatbox AI客户端应用和grok-beta大模型,以实现高效、智能的聊天体验。 引言: 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...
滚珠螺杆导程的定义与重要性
滚珠螺杆导程是指螺杆每旋转一圈时,螺母(或与之配合的移动部件)沿螺杆轴线方向移动的距离。这个参数在机械设计和制造中非常重要,因为它直接影响到传动系统的速度、精度和效率。 导程是滚珠螺杆的重要参数之一,它与切削…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
