Godot 3.5跨平台加载JSON文本文件失败,求正确加载方法
解决Godot跨平台加载JSON文件的问题
核心问题分析
System.IO.File依赖系统原生文件系统,Godot导出后(尤其是Android、HTML5平台),res://路径下的文件会被打包为引擎内部资源,无法通过标准IO接口访问。- 之前的Godot.File方法失效,大概率是文件未被正确纳入导出包,或缺少错误处理导致问题被隐藏。
步骤1:确保JSON文件被正确打包
- 选中编辑器中的
branching_dialogue.json文件,在Inspector面板操作:- Godot 3.x:将
Import As设为TextFile,点击Reimport。 - Godot 4.x:将
Import As设为Resource,选择Resource Type为TextFile,再点击Reimport。
- Godot 3.x:将
- 若不想将文件作为资源导入,需在导出设置的
Non-resource Files/Folders中添加路径:res://Story/ChatStories/*.json,确保导出时包含该文件。
步骤2:正确的跨平台加载代码
方法A:使用Godot文件API(推荐)
Godot 3.x(C#)
string filePath = "res://Story/ChatStories/branching_dialogue.json"; File file = new File(); Error openError = file.Open(filePath, File.ModeFlags.Read); if (openError != Error.Ok) { GD.PrintErr($"打开文件失败:{openError}"); return; } string jsonContent = file.GetAsText(); file.Close(); GD.Print(jsonContent);
Godot 4.x(C#)
string filePath = "res://Story/ChatStories/branching_dialogue.json"; using FileAccess file = FileAccess.Open(filePath, FileAccess.Mode.Read); if (file == null) { GD.PrintErr($"打开文件失败:{FileAccess.GetError()}"); return; } string jsonContent = file.GetAsText(); GD.Print(jsonContent);
方法B:使用ResourceLoader(更简洁,适合资源类文件)
Godot 3.x(C#)
TextFile jsonText = (TextFile)ResourceLoader.Load("res://Story/ChatStories/branching_dialogue.json"); if (jsonText != null) { string jsonContent = jsonText.Text; GD.Print(jsonContent); } else { GD.PrintErr("加载JSON文件失败"); }
Godot 4.x(C#)
var jsonText = ResourceLoader.Load<TextFile>("res://Story/ChatStories/branching_dialogue.json"); if (jsonText != null) { string jsonContent = jsonText.Text; GD.Print(jsonContent); } else { GD.PrintErr("加载JSON文件失败"); }
常见坑点排查
- 路径问题:绝对不要用
./这类相对路径,必须使用Godot标准路径res://(打包资源目录)或user://(用户数据目录,仅用于读写用户生成的内容)。 - 大小写敏感:Android、HTML5平台对文件名大小写严格,确保代码中的路径与实际文件名完全一致。
- 导出设置:检查导出模板的
Resources选项卡,确认Export Resources已勾选,避免资源被遗漏。
内容的提问来源于stack exchange,提问作者Null Salad
相关产品推荐
相关产品推荐

