OS.get_user_data_dir
2026/4/14大约 4 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — OS.get_user_data_dir
OS.get_user_data_dir
定义
OS.get_user_data_dir 返回游戏的用户数据目录路径——一个你的游戏可以放心存取文件的专属文件夹。
打个比方:每个安装在电脑上的软件都有一个自己的"小抽屉"用来存放用户数据(比如配置文件、存档等)。GetUserDataDir() 就是告诉你这个"小抽屉"在哪里。在 Windows 上通常在 C:\Users\你的用户名\AppData\Roaming\你的项目名\,在 Mac 上在 ~/Library/Application Support/你的项目名/。
这个目录是 Godot 根据你的项目名称自动创建和管理的,你不需要手动创建路径。
函数签名
C#
// OS.GetUserDataDir 获取用户数据目录
public static string GetUserDataDir()GDScript
static func get_user_data_dir() -> String参数说明
此方法没有参数。
返回值
String —— 用户数据目录的绝对路径。路径格式取决于操作系统:
| 操作系统 | 典型路径 |
|---|---|
| Windows | C:\Users\用户名\AppData\Roaming\项目名 |
| macOS | /Users/用户名/Library/Application Support/项目名 |
| Linux | /home/用户名/.local/share/项目名 |
代码示例
基础用法:查看用户数据目录
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
string dataDir = OS.GetUserDataDir();
GD.Print($"用户数据目录: {dataDir}");
// 运行结果: 用户数据目录: C:\Users\Player\AppData\Roaming\MyGame(Windows 上)
}
}GDScript
extends Node
func _ready():
var data_dir = OS.get_user_data_dir()
print("用户数据目录: ", data_dir)
# 运行结果: 用户数据目录: C:\Users\Player\AppData\Roaming\MyGame(Windows 上)实际场景:保存游戏存档
C#
using Godot;
using System.IO;
public partial class SaveManager : Node
{
private string _saveDir;
public override void _Ready()
{
// 存档目录在用户数据目录下的 saves 子文件夹
_saveDir = Path.Combine(OS.GetUserDataDir(), "saves");
// 如果存档目录不存在,创建它
if (!DirAccess.DirExistsAbsolute(_saveDir))
{
DirAccess.MakeDirRecursiveAbsolute(_saveDir);
GD.Print("已创建存档目录");
// 运行结果: 已创建存档目录
}
}
public void SaveGame(string slotName)
{
string filePath = Path.Combine(_saveDir, $"{slotName}.sav");
var file = FileAccess.Open(filePath, FileAccess.ModeFlags.Write);
if (file != null)
{
file.StoreString("存档数据...");
file.Close();
GD.Print($"存档已保存: {filePath}");
// 运行结果: 存档已保存: C:\Users\Player\AppData\Roaming\MyGame\saves\slot1.sav
}
}
}GDScript
extends Node
var _save_dir: String
func _ready():
# 存档目录在用户数据目录下的 saves 子文件夹
_save_dir = OS.get_user_data_dir() + "/saves"
# 如果存档目录不存在,创建它
if not DirAccess.dir_exists_absolute(_save_dir):
DirAccess.make_dir_recursive_absolute(_save_dir)
print("已创建存档目录")
# 运行结果: 已创建存档目录
func save_game(slot_name: String):
var file_path = _save_dir + "/" + slot_name + ".sav"
var file = FileAccess.open(file_path, FileAccess.WRITE)
if file:
file.store_string("存档数据...")
file.close()
print("存档已保存: ", file_path)
# 运行结果: 存档已保存: C:\Users\Player\AppData\Roaming\MyGame\saves\slot1.sav进阶用法:保存和读取配置文件
C#
using Godot;
public partial class ConfigManager : Node
{
private string _configPath;
public override void _Ready()
{
_configPath = OS.GetUserDataDir() + "/settings.cfg";
GD.Print($"配置文件路径: {_configPath}");
// 运行结果: 配置文件路径: C:\Users\Player\AppData\Roaming\MyGame\settings.cfg
}
public void SaveConfig(float volume, bool fullscreen)
{
var config = new ConfigFile();
config.SetValue("audio", "volume", volume);
config.SetValue("display", "fullscreen", fullscreen);
config.Save(_configPath);
GD.Print("配置已保存");
// 运行结果: 配置已保存
}
public float LoadVolume()
{
var config = new ConfigFile();
if (config.Load(_configPath) == Error.Ok)
{
return (float)config.GetValue("audio", "volume", 1.0);
}
return 1.0f;
}
}GDScript
extends Node
var _config_path: String
func _ready():
_config_path = OS.get_user_data_dir() + "/settings.cfg"
print("配置文件路径: ", _config_path)
# 运行结果: 配置文件路径: C:\Users\Player\AppData\Roaming\MyGame\settings.cfg
func save_config(volume: float, fullscreen: bool):
var config = ConfigFile.new()
config.set_value("audio", "volume", volume)
config.set_value("display", "fullscreen", fullscreen)
config.save(_config_path)
print("配置已保存")
# 运行结果: 配置已保存
func load_volume() -> float:
var config = ConfigFile.new()
if config.load(_config_path) == OK:
return config.get_value("audio", "volume", 1.0)
return 1.0注意事项
- 路径由项目名称决定:用户数据目录的最后一级文件夹名来自项目的
project.godot中的config/name设置。修改项目名会改变路径。 - 不需要手动创建根目录:Godot 会在首次访问时自动创建用户数据目录。但子目录需要你自己创建。
- 这个目录在不同系统上位置不同:这就是为什么你要用
GetUserDataDir()而不是硬编码路径——让 Godot 帮你处理跨平台差异。 - 卸载游戏不会自动删除:用户数据目录中的文件在卸载游戏后仍然存在,玩家重新安装后可以恢复存档。
- Web 版本的限制:在浏览器中运行时,用户数据目录映射到浏览器的 IndexedDB/LocalStorage,容量有限。
