You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4.2使用FLAG_BUNDLE_RESOURCES保存资源后加载报错求助

解决Godot 4.2嵌套Resource保存加载的类名冲突问题

问题根源

你遇到的Parser Error: class class_name hide a global script class错误,本质是嵌套在elm资源里的asghar内部类,在使用FLAG_BUNDLE_RESOURCES保存时,Godot会将该内部类的定义嵌入到.tres文件中。加载时,这个嵌入的类定义会和原脚本里的内部类asghar重名,触发类名冲突。

解决方案

方案1:将嵌套Resource拆分为独立脚本(推荐)

把内部类asghar单独写成独立资源脚本,既避免类名冲突,也符合Godot资源管理规范:

  1. 创建asghar.gd文件,内容如下:
extends Resource
class_name asghar

var name2:String = "asghar"
  1. 修改主资源elm.gd,直接引用全局的asghar类:
extends Resource
class_name elm

var level:int = 0:
    set(value):
        print("VALU IS SET")
        level = value
        level_changed.emit(level)
    get:
        return level
var experience:String= ""
signal level_changed

var asghar_2:asghar = asghar.new()
  1. 原有读写代码无需修改,此时即使不使用FLAG_BUNDLE_RESOURCES,Godot也能正确识别并保存嵌套的asghar资源(因为它有全局类名);如果使用该标志,也不会出现类名冲突。

方案2:调整加载逻辑(仅临时应急)

若不想拆分脚本,可尝试用强制加载标志跳过部分类解析检查,但该方式可能导致嵌套资源类型识别异常,不建议长期使用:

var c:Resource 
if(ResourceLoader.exists("user://_myfile.tres")):
    c=ResourceLoader.load("user://_myfile.tres", "", ResourceLoader.FLAG_FORCE_LOAD) 

额外优化建议

加载时指定具体类型,避免类型转换错误:

var c:elm = ResourceLoader.load("user://_myfile.tres") as elm
if c:
    print(c)
    print(c.level)

内容的提问来源于stack exchange,提问作者ehsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:46:02