Godot提示和最佳做法

以下是我最好的Godot技巧,我认为您至少应该考虑一下。 当然,这里列出的所有Godot提示可能并不总是对您有用。 或者,对于给定问题,更好的解决方案是不使用它们。 但总的来说,我确实发现它们非常有用。 请记住,本网站上的所有内容仅是我的偏爱。 如果您以自己的方式做,那完全没问题。

构建游戏技巧

您事先考虑和规划游戏结构的次数越多,在开发过程中重新开始或对结构进行重大更改的机会就越小。 有一次我在Godot上进行游戏。 我只是从制作游戏原型到构建游戏。 随着项目实现范围的扩大,原型的结构不再真正方便。

我开始了一个新的项目。 而且我研究了更好的新结构。 但是很快我发现,在某个时候我想在游戏中添加多人游戏。 但是我必须再次对该结构进行重大更改才能使其正常工作。 因此,我再次开始构建新项目。 当然,一些构造游戏的诀窍会伴随经验。 但是我会争辩说,如果我最好事先考虑一下结构,那可以节省一些时间。 因此,这里有一些Godot中有关构建游戏的技巧。

使用多个场景

将Godot Engine中的场景视为游戏的一部分或对象,可以经常显示。 当然,您可以自己决定场景应该包含什么。 即使不建议这样做,您也可以将整个游戏塞入一个大的单一场景。 但是更好的方法是将游戏分为不同的场景:例如,您可以制作一个单独的敌人场景。 然后,每当敌人出现时,您都可以实例化该敌人的场景。

一个场景也可以由不同的场景组成。 因此,例如,如果您有一个玩家场景,则它可以由身体场景和武器场景组成。 如您所见,Godot中的场景系统是一种非常灵活且通用的构建游戏对象和游戏世界的方式。

即使没有游戏的其余部分,您的场景也应该能够运行

一个好的做法是,以某种方式构建场景,以便它们可以独立于游戏的其余部分运行。 例如,如果您有一个玩家场景,那么可以在完全不同的游戏中使用相同的玩家场景会非常方便。 只需将场景复制粘贴到其他游戏文件夹中即可。 如果您不通过SceneTree进行连接,而是使用Signals并让它们以这种方式进行通信,则可以这样做。

使用信号

信号是发送通知的一种非常方便的方式,说明发生了某些事情。 许多节点已经具有内置信号。 您可以在“ 节点”选项卡中(在“ 检查器”旁边—检查屏幕截图)找到它们。 从那里您可以将它们与您的代码连接。 最基本的用法之一是将按钮单击连接到功能。

使用信号的一大优势是,您可以让场景实例相互通信。 但是您也可以在不中断游戏的情况下独立运行场景(您会收到通知,尽管没有连接信号)。

您还可以构建自定义信号并将其连接到代码中。 有关更多信息,请查看我关于信号的帖子 (还有此处和此处的官方文档可以帮助您理解信号)

利用团体

信号选项卡旁边是组选项卡 (再次检查屏幕截图)。 在那里,您可以将节点添加到组中。 组的功能有点像标签系统。 您还可以在代码中向组添加内容:

  add_to_group(“玩家”) 

将节点或场景放入组中后,您可以随时检查该对象是否在给定组中,如下所示:

  is_in_group(“玩家”) 

例如,如果要检查与特定组的碰撞,这将非常有用。 如果您想了解有关组的更多信息,请查看此链接。

使用继承

继承是构建游戏的有效方法。 即使听起来确实是一种先进的方法,也不难理解。 实际上,这在面向对象的编程中非常常见。 假设您的游戏中有三种不同类型的敌人。 所有三个敌人都有各自共享的特征和特征,每个敌人都具有独特的特征。 假设敌人看起来一样,除了第一个是绿色 ,第二个是红色 ,第三个是蓝色

因此,做到这一点的一种方法是创建三个独特的场景,在其中构建这三个敌人。 一种绿色,一种红色和一种蓝色。 太好了,工作完成了。 但是,如果您想更改敌人的某些内容,则必须在每个独特的场景中进行更改。

第二种方法是使用继承。 因此,首先,您将创建一个父级场景。 在我们的示例中,该父场景将由一个没有颜色的敌人组成。 然后,您将制作该父场景的三个继承的场景(请检查屏幕快照),然后分别更改每个场景中敌人的颜色。 所以现在你也有三个敌人。 但是,如果您想更改敌人的场景,只需在父场景中进行更改。 继承的场景将自动更改。 在这里查看有关继承的更多信息

Godot编码技巧

尽管我主要遵循“写脏话,写得快”的规则,但我也认为,当您在Godot Engine中进行编码时,应牢记一些注意事项。 这些Godot提示和技巧将帮助您进行编码。

编写本地化就绪

即使您可能不考虑立即对游戏进行本地化,也是一种很好的做法,即开发您的游戏并编写您称为本地化的代码。 这意味着您已经准备好一切,以防将来要转换游戏。 做到这一点非常容易,之后可以节省很多时间。

您唯一要做的就是将游戏中的文本连接到电子表格,而不是将每行对话或UI元素硬编码到脚本中。 查看这篇有关本地化的文章 ,以了解更多有关如何进行本地化的信息。

在代码中使用注释

使用注释写出代码中正在发生的事情。 即使您现在可能已经完全知道代码的每个部分都在做什么,但可能在一两年后就不会再考虑进行扩展或对游戏进行某些更改了。 同样,如果您在团队中进行编码并且某人必须了解您的代码功能,那么用这种方法会容易得多。 要在GDScript中发表评论,只需使用#即可

  func _ready():#此行只是评论传递 

命名功能

这一点并不是很重要,但是可以帮助提高代码的可读性。 尝试以某种方式命名您的函数,以便以后可以轻松了解其功能。 我本人尝试根据函数的作用或返回的结果来命名函数。 例如,如果它返回一个布尔值,我将以is_开始该函数 因此,如果我想检查库存是否已打开,我将调用该函数is_inventory_open()。 或者,如果我有一个应清除清单的void函数,则将其称为do_ ,因此将其称为do_purge_inventory或类似的名称。

即使GDScript没有私有函数,我也要使用下划线启动我的私有函数: _my_private_func() 。 这只是我个人的方式,但是我建议您,找到适合自己的命名约定。 找到一个代码后,请尝试坚持下去,因为它使阅读代码变得更加容易。

导出关键字

导出是可以在变量声明中编写的关键字。 它的作用是将变量“导出”到Godot编辑器的检查器块中。 这样,您可以直接在编辑器中更改值,而不仅仅是在代码中。 在我眼中,这对于希望更改的变量最有用-因此对测试和平衡事物最有用。 查看以下示例。 这三种都是有效的形式:

  #这将向检查器添加一个名为“健康”的变量 
#,默认值为10
出口var健康= 10
  #这将为检查器添加一个称为“机会”的浮点数 
#默认值为0.1
出口(浮动)无功机会= 0.1
  #这会向检查器添加一个名为“损伤”的变量 
#,默认值为0
出口(int)无功损害

如果您希望这样做,也可以对整个场景或纹理使用export关键字:

 出口(纹理)墙 
导出(PackedScene)var player_char

需要考虑的更多Godot技巧

在Godot技巧和窍门中,我还建议其他几件事。 它们更多是个人喜好,但是我还是要提及它们。

资料夹结构

当我开始使用Godot Engine时,我以非常特定的方式订购了项目文件夹。 我将所有脚本放入“ scripts”文件夹中。 我将每个场景放入“场景”文件夹中。 我将所有材料放入“材料”文件夹中,依此类推。 尽管这在一开始就足够好用,但我很快意识到,在整个“ scripts”文件夹中导航以找到我要搜索的特定脚本变得越来越复杂。

因此,我很快开始重组我的项目文件夹。 对我而言,到目前为止最好的方法是对文件夹进行排序,以使每个对象都有其文件夹(请检查屏幕快照)。 然后,我将与此对象关联的所有内容放入其文件夹中。 这样,我总是可以找到我要搜索的内容。 即使在较大的项目中。 Godot本身也有助于此结构,因为它对于不同的资源类型具有不同的符号。 因此,您可以立即识别脚本,文件夹中的场景或材料。

制作和使用主题

不能发布有关Godot技巧和最佳实践的文章,也不能提及主题。 主题是改变游戏外观的一种非常有效的方法。 实际上,整个Godot Engine本身都使用一个主题来向您介绍其编辑器。

您可以使用它来使控制节点(因此您的GUI)具有特定的外观。 定义主题并将其用于整个UI。 要制作主题,只需转到任何控制节点并创建一个新主题(请查看屏幕截图)。 保存此主题,即可将其用于所有其他节点。

要了解有关如何制作自己的主题的更多信息,请查看我关于主题的文章 ,或在此处查看官方文档。

利用输入图

即使您可以通过直接将按下的按钮写入代码中来检查按下了哪个按钮,使用输入映射也是一个好习惯。 您可以在“ 项目设置”>“输入地图”下找到它(检查屏幕截图)。

您可以在此处定义所需的操作,还可以将键盘按键,鼠标按钮单击或游戏板按钮按下可用于特定操作。 查看我关于输入的文章,以了解更多信息。

同样,您可以让播放器自定义输入键。 查看本教程,以创建用于自定义按键绑定的选项菜单

希望我对我最好的Godot提示有所帮助。 如果您想分享其他Godot的技巧,请在下面的评论中告诉我。 您也可以通过邮件将它们写给我,以后我可能会将它们添加到我的Godot技巧文章中。