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

Godot中实例化类的正确方式:preload与class_name对比

GDScript 2.0 类实例化方式对比与推荐

两种方式的核心区别

  • preload/加载脚本方式

    • 属于显式依赖,必须指定脚本完整路径,编辑器会提前校验路径有效性,编译阶段完成加载,能避免运行时路径错误。
    • 脚本不会全局暴露,只有调用preload的位置能引用该类,不会污染全局命名空间。
    • 可配合load()实现动态加载(比如根据运行时条件切换不同脚本),而preload()是静态加载,性能更稳定。
  • class_name关键字方式

    • 属于全局注册模式,脚本内声明class_name后,整个项目任意位置都能直接用类名实例化,无需手动写加载路径。
    • 写法更简洁,省去preload的冗余代码,适合频繁调用的核心类。
    • 缺点是会占用全局命名空间,若不同脚本使用相同class_name,编辑器会直接报冲突错误。

推荐使用场景

  • 优先选class_name的情况:

    • 项目中的通用核心类,比如自定义UI组件、工具类、全局管理器这类被多处引用的类,用起来更高效。
    • 快速原型开发阶段,追求代码简洁,减少路径书写的麻烦。
  • 优先选preload的情况:

    • 仅在局部场景或单个脚本内使用的类,避免全局注册污染命名空间。
    • 需要动态加载的场景(比如根据关卡加载不同敌人脚本),可搭配load()实现;preload()则适合固定依赖的场景。
    • 大型项目中,显式的preload能让依赖关系更清晰,方便后续维护和重构,开发者一眼就能看到依赖的脚本位置。

哪些情况要避免滥用class_name

存在不少场景不能随便用class_name:

  • 小型工具类/局部专用类:这类类仅在一两个脚本里用到,全局注册完全没必要,反而增加命名冲突风险。
  • 模块化开发场景:如果项目按模块拆分,每个模块内部的类尽量用preload,避免跨模块的全局依赖,方便模块独立复用或修改。
  • 可能重名的类:比如不同模块里都有DataManager,若都加class_name会直接冲突,这种情况用preload指定路径更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:55:22