Unity导出游戏后如何正确存储并读取跨设备可访问的字符串
核心问题原因
- 硬编码本地绝对路径(比如
C:\Users\User\Desktop\string.txt)的方案完全不可行:不同设备的系统分区、用户名、目录权限都存在差异,打包安装后程序不可能访问到你开发机上的桌面文件,必然读取失败。 Resources.Load<string>()无法生效的原因:Unity的Resources系统不支持直接加载string类型,string不是Unity可识别的序列化资源类型,泛型参数传string永远返回空值。
可落地的跨设备读取方案
根据你的文本是否需要运行时修改,选对应方案即可:
方案1:TextAsset放入Resources目录(适合固定不变的静态文本)
这是最简便的静态文本读取方案,内容会被直接打进游戏包体,全平台可正常读取:
- 操作:把你要存的字符串保存为
.txt文件,放到项目里任意名为Resources的文件夹下,比如路径Assets/Resources/string.txt - 读取代码:
// 加载时不需要写.txt后缀,路径从Resources根目录开始计算 TextAsset txtAsset = Resources.Load<TextAsset>("string"); string targetStr = txtAsset.text; // 读取完成后卸载资源,避免内存占用 Resources.UnloadAsset(txtAsset);
方案2:persistentDataPath路径读写(适合运行时可修改的动态文本)
如果你的字符串需要在游戏运行时被修改(比如存档、用户自定义配置),用Unity提供的跨平台可读写路径即可,引擎会自动适配不同系统的合法存储位置,不需要你手动写死绝对路径:
- 各平台自动映射的路径规则:
- Windows:
C:\Users\当前登录用户\AppData\LocalLow\你设置的公司名\你设置的项目名\ - 安卓:应用专属沙盒存储目录,不需要额外申请存储权限
- iOS:应用Documents目录
- Windows:
- 读写示例代码:
using System.IO; // 自动拼接全平台通用的文件路径 string filePath = Path.Combine(Application.persistentDataPath, "string.txt"); // 写入字符串 File.WriteAllText(filePath, "需要存储的字符串内容"); // 读取字符串 string readStr = File.ReadAllText(filePath);
- 提示:如果需要带初始文本,可以把初始txt文件放到
StreamingAssets文件夹下,首次启动游戏时拷贝到persistentDataPath再做后续读写。
方案3:ScriptableObject存储(适合和游戏配置绑定的字符串)
如果你的字符串是游戏配置的一部分,直接用ScriptableObject存储更方便,不需要处理文本文件解析:
- 先定义配置类:
using UnityEngine; [CreateAssetMenu(fileName = "GameStringConfig", menuName = "Config/Game String")] public class GameStringConfig : ScriptableObject { public string myString; }
- 操作:在Unity编辑器右键菜单创建对应配置资产,把字符串填到资产的字段里即可,可以直接拖到组件的Inspector面板引用,也可以放在Resources目录下加载读取。
内容的提问来源于stack exchange,提问作者The Crazy
相关产品推荐
相关产品推荐

