我想在 GDScript 中构建一个可重用的库。当用我熟悉的其他语言(JavaScript 和 C#)构建库时,我通常会利用 GDScript 似乎没有的两个功能:
在GDScript中,(1)似乎是通过强调私有方法来解决的。虽然我发现这不如显式私有函数有用,但我确实找到了 Godot 提案,其中正在讨论添加此功能。
这个问题是围绕如何解决(2)的问题,它允许将大型且复杂的库分割成任意数量的文件。我能想到的两个选择是:
class_names
构建的命名约定将功能拆分为多个文件。例如,有一个脚本导出指定库的公共 API class_name
。例如class_name MyLibrary
。然后,其他文件将指定类名称,例如 class_name MyLibrary_UtilA
、MyLibrary_UtilB
等。该文档仅涉及 MyLibrary
,希望用户不要修改内部结构。我是否缺少任何更适合组织大型/复杂库的 GDScript 功能,或者这两个选项是最好的方法吗?
我现在正在从事的具体项目是一个大型库的端口,该库在 C# 或 JS 中可能会被分成大约 50 多个不同的文件。
是的,还有另一种方法,可能适合您。
您可以使用
preload
和相对路径来引用您的脚本。例如:
const MyClass := preload("my_class.gd")
然后您可以使用该常量作为类。例如:
var obj := MyClass.new()
这是因为:
GDScript
(这是一个Resource
)的实例是GDScript类。也就是说,GDScript
是一个元类。const
和preload
都在解析过程中解析(即preload
是一个常量表达式)。因此,与使用 load
不同,类型信息在编写代码时可用。这样:
class_name
,因此不会污染全局名称空间。