Unity persistentDataPath使用案例
Unity persistentDataPath使用案例
一、Application.persistentDataPath
1、概念
persistentDataPath:此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件;是一个可读写的目录;此文件夹在Editor阶段没有,手机安装App后自动生成;
关联的概念-Unity项目文件夹StreamingAssets:只能读,不能写。
2、应用场景
1)手机应用场景中存储当前游戏的进度,以便下次运行游戏时读取
如下代码文件,存储游戏中的下列数据coins、starCount = 0、collection
[Serializable]
public class SaveData
{
//Current loaded save file
public static SaveData save;
private static string fileName;
//Unsaved global variables
public static bool checkpoint = false;
public static Vector3 checkpointPos;
public static Quaternion checkpointRot;
public static bool hubPositionSet = false;
//Saved variables
public int coins = 0;
public int starCount = 0;
public List<string> collection = new List<string>();
//Save
public void Save()
{
System.IO.File.WriteAllText(fileName, JsonUtility.ToJson(this));
}
//Load (Make sure fileName is set, will be loaded if it exists)
public static bool Load()
{
if (System.IO.File.Exists(fileName))
{
save = JsonUtility.FromJson<SaveData>(System.IO.File.ReadAllText(fileName));
hubPositionSet = true;
return true;
}
else
return false;
}
//Create new game
public static void NewGame()
{
save = new SaveData();
hubPositionSet = false;
}
public static void SetFileName(string name)
{
fileName = Path.Combine(Application.persistentDataPath, name + ".json");
}
//Null check
public static void NullCheck()
{
if (save == null)
{
SetFileName("TestSave");
if (!Load()) NewGame();
Debug.Log("Hello Mario Framework: Using test save file!");
hubPositionSet = false;
}
}
//Get coin count
public int GetCoins()
{
return coins;
}
//Add or remove coins
public void AddCoins(int i)
{
coins += i;
}
//Collect a single coin
public void CollectCoin()
{
coins++;
}
//Get star count
public int GetStarCount()
{
return starCount;
}
//Collect a star (Or ignore if already collected)
public bool CollectStar(string name)
{
if (AddCollection(name))
{
starCount++;
return true;
}
else return false;
}
//Add to collection
public bool AddCollection(string id)
{
if (!collection.Contains(id))
{
collection.Add(id);
return true;
}
else return false;
}
//Check if something is in the collection
public bool CheckCollection(string id)
{
return collection.Contains(id);
}
}
2)放置一些首次运行时需要的可读写的数据文件
将游戏运行时需要的可读写的文件模板放到只读文件夹“StreamingAssets”,手机首次运行时再拷贝到可读写的目录“Application.persistentDataPath”,
如下实例,游戏在手机平台首次运行时将我们的数据模板文件”data.txt”拷贝到“persistentDataPath”目录,以便于以后在手机端游戏运行时实时读写。
public void copy(string fileName = "data.txt")
{
string url;
//Mac,Windows或Linux平台
#if UNITY_EDITOR || UNITY_STANDALONE
url = $"file://{Application.dataPath}/StreamingAssets/{fileName}";
//ios平台路径
#elif UNITY_IPHONE
url = $"file://{Application.dataPath}/Raw/{fileName}";
//安卓路径
#elif UNITY_ANDROID
url = $"jar:file://{Application.dataPath}!/assets/{fileName}";
#endif
string persistentUrl = $"{Application.persistentDataPath}/{fileName}";
if (!File.Exists(persistentUrl))
{
Debug.Log($"{persistentUrl} 文件不存在,从StreamingAssets中Copy!");
WWW www = new WWW(url);
while (true)
{
if (www.isDone)
{
if (www.error == null)
{
//本次读的文本
File.WriteAllText(persistentUrl, www.text);
File.WriteAllBytes(path, www.bytes);
Debug.Log($"持久化目录: {persistentUrl}");
break;
}
else
{
Debug.LogWarning($"没得到StreamingAssets的文件 : {fileName}");
}
}
}
}
else
{
Debug.Log($"{persistentUrl} 文件已存在!");
}
}
相关文章:
Unity persistentDataPath使用案例
Unity persistentDataPath使用案例 一、Application.persistentDataPath 1、概念 persistentDataPath:此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件;是一个可读写的目录;此文件夹在Edi…...
Android 测试手册
1. 介绍 Android 测试是确保应用程序质量的重要步骤。它包括不同类型的测试,用于验证应用程序的功能、性能、安全性和用户体验。这个手册将指导你了解和实施 Android 测试的主要方法和工具。 2. 测试类型 2.1 单元测试 目的:验证单个组件(…...
各大平台统遭入侵??区块链市场遭攻击损失近3亿!
今年,全球发生多起骇人听闻的勒索入侵软件攻击事件,黑客组织利用各种手段和技术,不断试图突破网络安全防线,窃取敏感信息、破坏系统运行,甚至进行勒索和敲诈,使得网络安全问题日益凸显其重要性和紧迫性。 S…...
Java泛型(“代码模板”,一套代码套用各种类型)
1.什么是泛型 a.定义 i.如果不用泛型定义,在使用ArrayList时需要为每个class编写特定类型代码。 ii.泛型就是定义一种模板,既实现了编写一次,万能匹配,又通过编译器保证了类型安全。 iii.编写模板代码来适应任意…...
速响低代码平台:升级营销管理系统,开启高效无忧新体验!
当前日新月异的商业环境,企业面临着前所未有的挑战与机遇。随着市场竞争的日益加剧和企业业务的不断拓展,传统的营销方式和管理手段逐渐显露出其局限性,难以适应快速变化的市场需求。 数据收集难:传统的营销管理缺乏对客户数据的收…...
Gitlab升级14.0.12-->14.3.6遇到的gitlab-ctl reconfigure错误
问题描述 在按照官方文档升级路线11.0.2>17.2.2的过程中,升级14.0.12–》14.3.6时遇到一个错误: Running handlers: There was an error running gitlab-ctl reconfigure:rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had…...
JDBC导图
思维歹徒 一、使用步骤 二、SQL注入 三、数据库查询(查询) 四、数据库写入(增删改) 五、Date日期对象处理 六、连接池使用 创建连接是从连接池拿,释放连接是放回连接池 七、事务和批次插入 八、Apache Commons DBUtil…...
飞思实验室与中飞院联合开发教学课程,校企联袂共绘教育蓝图
近日,飞思实验室与中国民用航空飞行学院(以下简称“中飞院”) 航空电子电气学院合作,共同开发《无人智能视觉导航控制技术》、《多旋翼无人飞行器集群系统》实验课程。这一举措旨在深化校企融合,学校通过引入企业带来的…...
Telephony Call
1、Telephony 架构 Telephony整体架构和Android架构一样的,包括APP层,框架层,HAL层,内核层。 其中HAL层不同平台实现方式不同,其中MTK SPRD 平台使用AT通道的方式实现,高通使用QMI方式实现。 2、通话业务介绍 APP包括Dialer.apk、TeleService.apk、Tele…...
Python--TCP/UDP通信
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。 创建套接字:首先࿰…...
【已解决】请教 “Sa-Token 集成 xxl-job,报错:非 web 上下文无法获取 HttpServletRequest” 如何解决
1. xxl-job 报错日志 2024-09-11 17:19:04 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1726046344528] <br>----------- xxl-job job execute start -----------<br>----------- Param: 2024-09-11 17:19:04 [com.xxl.job.core.thread…...
Redis——常用数据类型string
目录 常用数据结构(类型)Redis单线程模型Reids为啥效率这么高?速度这么快?(参照于其他数据库) stringsetgetMSET 和 MGETSETNX,SETEX,PSETEXincr,incrby,decr…...
架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间
本文首发在这里 重中之重就是想实现无锁!无锁!无锁! 源码 servergolang 预计还会实现gate_server,接受并保持websocket长连接,按需双向流到game_server进行消息转发 未来上述服务均会以容器的形式由k8s自动化部署、…...
个人随想-gpt-o1大模型中推理链的一个落地实现
首先祝大家中秋节快乐。 最近openai又推出了新的模型openai o1还有它的mini版。官网的介绍,就是它的推理能力很强,比gpt-4o有很大的提升。 最近也跟同行在聊这个o1,看看落地方面有哪些可行性。在我们自己的实验上,把o1用…...
python解析ip范围,判断ip是否在ip范围内
目录 1. 背景 2. 代码使用示例 2.1 分割ip,横杠 (-) 的ip范围 2.2 判断ip在掩码(/)的范围内 2.3 判断ip在横杠(-)的范围内 2.3.1 格式:192.168.1.1-192.168.1.10 2.3.2 格式&…...
Springboot错误日志切面,找到post请求体被消费后的数据
问题记录:测试环境接口报错,日志里没有请求参数等信息,于是写了一个切面,但切面中获取不到 request的请求体,因为 post 请求体只能被消费一次,于是找解决办法 解决方法 既然 request 被消费了导致对应的请…...
【二十】【QT开发应用】listwidget右键菜单和删除item
创建项目,添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件,选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…...
LabVIEW机动车动态制动性能校准系统
机动车动态制动性能测试系统通过高精度的硬件设备与LabVIEW软件的紧密配合,实现了对机动车制动性能的精确校准与评估。系统不仅提高了测试的精确性和效率,而且具备良好的用户交互界面,使得操作更加简便、直观。 项目背景 随着机动车辆数量的…...
Linux(CentOS8)服务器安装RabbitMQ
我安装了很久都没有成功, 各种问题, 每次的异常都不一样, 现将成功安装过程做个总结 安装前工作 确保已经安装了一些基础工具和组件库 下载安装包 https://www.erlang.org/patches/otp-24.3.4.5 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.15/ra…...
R语言进行无序多分类Logistic回归
在临床研究中,接触最多的是二分类数据,如淋巴癌是否转移,是否死亡,这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程,可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
