【问题标题】:How to make it such that there are individual scripts for each level in godot game engine?如何使godot游戏引擎中的每个级别都有单独的脚本?
【发布时间】:2022-07-14 04:26:27
【问题描述】:

我是 Godot 引擎的新手,所以如果这是一个非常简单的问题,请原谅我。

所以我正在创建一个游戏(2d 平台游戏),它的关卡布局几乎与其他所有关卡相同。但是,每个级别都有一个技巧。说: 对于 1 级:

  • 轻弹控制杆(按 f 键)并打开一个传送门。
  • 进入传送门并进入下一关(2 级)

对于第 2 级:

  • 轻弹控制杆(按 f 键)5 次,门户就会打开。
  • 进入传送门并进入下一层(3 级)

对于第 3 级:

  • 轻弹控制杆(与 1 级和 2 级不同,通过鼠标光标单击)然后门户打开。
  • 进入门户

等等等等

这就是我正在开发的游戏的布局。问题是当我复制关卡时,脚本(用于杠杆、门户等)似乎对每个关卡节点都不是“单独的”。有没有办法使每个级别节点及其子节点(例如级别 2 的杠杆具有单独的脚本到级别 1 的杠杆)?

谢谢,如果这是一个愚蠢的问题,再次抱歉。

【问题讨论】:

    标签: godot 2d-games gdscript


    【解决方案1】:

    没有诀窍。

    此问题已在 Godot-Proposals 存储库的讨论中提出。请提出您对如何改进 Godot 的想法。

    Godot 在组织项目方面相当灵活。这也意味着保留您选择的组织取决于您。

    首先,我必须提到脚本不需要是它们自己的文件。在“附加节点脚本”对话框(您可以从场景上下文菜单上的“附加脚本”中打开)中,您可以选择“内置”脚本。这会将脚本存储在场景文件中。因此,如果您复制场景文件,您也复制了脚本。 虽然,将脚本放在单独的文件中通常更适合版本控制和使用外部编辑器。


    除此之外,还有一些工具可以帮助您:

    • 在文件系统的上下文菜单中,您可以选择“查看所有者...”。这将向您显示明确使用资源(包括脚本)的位置(使用 load 或任何动态的引用不计算在内)。
    • 在项目菜单的工具下,选择“孤立资源浏览器...”。这将向您显示任何未在任何地方使用的资源(包括脚本)(同样,它忽略了动态加载,因此它可能会说您实际使用的东西不是)。

    使用这些工具,您可以 - 例如 - 为每个级别创建一个文件夹(以及一个用于跨级别共享资源的文件夹,可能按类型组织在文件夹中),并检查级别文件夹上的脚本是否从同一文件夹中的场景引用,而不是其他级别的文件夹。

    有些人喜欢将所有脚本放在一个文件夹中,而不管它们在哪里使用,而所有场景都放在同一个文件夹中,等等。这有点难以跟踪,但是您可以使用上面提到的工具进行检查。 也许您可以有一个命名方案,以便您知道每个资源属于哪个级别(或者该资源是否打算在多个级别中重复使用)?


    同时考虑:

    • 信号。例如,除了它们的作用之外,您可能拥有相同的杠杆。与其在脚本中编写代码,不如添加自定义 signal 并将其连接到编辑器中。同样,这些信号连接存储在场景文件中。 例如,我会在连接到杠杆的代码中设置杠杆切换次数的计数器,而不是将其放在杠杆本身上。顺便看看signal busresource based communication

    • 导出的变量。如果您有类似的脚本,请确定差异(例如门户进入哪个级别),并考虑将它们转换为可从检查器编辑的导出变量 (export var)。这些变量存储在场景文件中,因此即使您复制场景,它们也将保持唯一。 这也意味着如果您在代码中发现错误,您不必在两个不同的脚本上修复它。但是,请注意,如果您将看似相关但实际上并不相关的事物进行概括,那么您以后会遇到麻烦,因此一般建议是不要先发制人。

    这些也意味着这些脚本将不再是场景中唯一的,您可以将它们移动到所有此类脚本的公共文件夹中,如果它们用于 - 并且仅用于 - 正确的场景。


    顺便说一句,我想给你指点:

    • 场景组合:在 Godot 场景中可以有其他场景的实例。因此,您可以为各个组件制作场景(例如,门户的场景)并将它们放在关卡场景中。那么我们所说的这些脚本实际上并不属于一个关卡,而是属于一个组件。并且该组件可以毫无问题地在多个场景中使用(同样,借助信号和导出的变量)。

    • 场景继承。您正在做的事情听起来像是您可以拥有一个包含公共元素的基本场景,然后从中为每个级别创建继承的场景(您可以在文件系统中现有场景的上下文菜单中找到该选项)。继承的场景将拥有基础场景的所有内容,但可以添加新节点或更改现有节点的属性。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2023-02-14
      • 2021-01-26
      • 2010-09-10
      • 2015-12-20
      • 2021-09-25
      • 2022-01-06
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多