基于Godot游戏引擎实现Galgame核心功能Step1

OtherProgramming Languages游戏制作C#GodotGalgame制作游戏引擎
14-10-2024 - 20:13
14-10-2024 - 20:13

我个人是个游戏开发者,虽然不是制作的Galgame,但也用到了Galgame的核心功能,那就是对话框

在这个系列话题里我会逐步说明,我是如何使用Godot游戏引擎实现Galgame的对话框的.

了解Godot

Godot是什么

Godot游戏引擎是一个开源、跨平台的2D和3D游戏开发工具,因其灵活、易用和强大的特性广受欢迎

跨平台支持

Godot支持多种操作系统,包括Windows、macOS、Linux,并且能够导出游戏到PC、移动设备、Web和控制台等多个平台

全面的2D与3D支持

Godot提供独立的2D和3D工作流,不仅在3D开发方面具备强大功能,2D方面也十分出色,拥有优化的2D渲染引擎,适合开发轻量级的视觉小说和Galgame

场景树结构

Godot采用场景树架构,将游戏逻辑分解为不同的场景(Scenes),每个场景由节点(Nodes)组成。节点可以是物体、角色、UI元素、脚本等,方便开发者构建复杂的游戏结构

多种脚本语言

Godot支持多种脚本语言,主要包括GDScript(类似Python的轻量语言)、C#(更适合复杂的系统交互)和VisualScript(可视化脚本,仅在Godot3.0版本可用)等,开发者可以根据项目需求灵活选择

强大的UI工具

Godot内置的UI系统非常适合制作文本驱动的游戏,如Galgame。通过丰富的UI组件和简单直观的布局方式,可以轻松实现对话框、选项菜单等关键功能

开源与自由定制

Godot引擎完全开源,使用MIT许可,开发者可以自由修改引擎源码并用于商业项目。此外,Godot拥有活跃的社区,提供丰富的资源和插件,能够加快开发进程

为什么选择Godot?

Godot的设计哲学强调简洁和模块化,开发者可以通过组合不同的节点和工具,快速实现所需功能,非常适合制作Galgame这类文本密集型游戏

搭建对话框场景

具体怎么下载Godot我就不说明了,直接步入正题,进入第一步

创建节点

首先需要创建一个项目,项目渲染器类型的选择无所谓,创建好之后也能改

推荐选择 "兼容"

在创建完项目后,在左上角的创建根节点中选择 "其他节点" ->"Control" -> "Panel"

fang_chu-1728930458539-QQ20241015022706png

创建完成后,将其重命名为**"DialogueBox",随后在右方的检查器中找到"Layout" -> "Anchors Preset"**

并将其值更改为 "底部全幅",然后再在2D视图中更改其为你想要的高度,就像这样

image.png

这样,我们就有了基本的对话框了,接下来我们需要添加角色名以及对话内容.

首先在左上角场景视图中右键**"DialogueBox"节点,选择添加子节点**,随后找到**"Control" -> "Label"**并添加

我们需要添加两个Label节点,一个重命名为 "Name",另一个则命名为 "Dialogue"

添加完成后可以不更改其锚点,也就是 **"Anchors Preset"**属性

如果需要更改的话,推荐将**"Dialogue"**节点的锚点更改为 "底部全幅",在此之前,你需要将 **"Layout Mode"**属性更改为 **"Anchors"**才能更改锚点

随后调整两个Label为合适的大小

"Name"节点的属性不需要过多更改,你需要将"Dialogue"节点的"Vertical Alignment"属性更改为 "Center",将"Autowrap Mode"的属性更改为 "Word",并启用 "Clip Text"

这里是将对话文本的垂直对齐方式设置为居中,并将换行模式更改为单词之间软换行以及当文本超出节点边距时裁剪文本

尽量控制单个对话的字数,你也不想角色对话被裁剪掉吧

然后根据你的需求,将两个Label节点的**"Font Color"属性更改为你想要的颜色,并将"Font Size"更改为合适的大小,如果你有字体的话,也可以导入字体并将其设置为"Font"属性的值,对于字体的设置,我后续的设置对话框样式**中会具体提到

我这里是将字体颜色设置为了黑色(因为我的对话框样式的底色是白色)将字体大小设置为了50个像素

我们都知道,Galgame中的文字一般是逐字显示的,所以我们这里需要添加一个 "**Timer"**节点,用以控制逐字显示速度

添加方法还是和之前的一样,将其添加为 "DialogueBox" 的子节点,并重命名为 "DialogueTimer"​

***"DialogueTimer"***节点的属性不需要更改

进行完以上操作后,你的节点树结构应该是这样的

image.png

设置对话框样式

如果你觉得Godot默认的Panel样式不好看,你可以先自己导入你的合适大小的素材,然后点击 **"DialogueBox"**节点

随后在检查器中找到 **"Panel"**属性

点击最右边的箭头,新建一个样式盒,选择 "StyleBoxTexture"

随后将你导入的图片素材拖入 **"Texture"**旁边的 **"<空>"**中

图片素材推荐png格式

如果你觉得Godot默认的字体不好看,你可以导入你自己认为好看的字体

导入字体需要注意一点: 如果你的游戏面向多语言,那么推荐导入同时支持你所支持的语言的字体或每个语言一种字体

由于本系列话题只是谈及如何在Godot实现Galgame的对话框,所以不会提及如何实现当玩家切换语言时切换为对应的字体

首先点击Label节点,在检查器找到**"Font"属性,并新建一个"FontVariation",然后将"Base Font"**设置为你想要的默认字体

使用字体的变体(FontVariation)是为多个字体考虑的,如果你只有/只需要一种字体,那么直接将字体拖到**"Font"**属性中即可

保存

在进行完这一系列操作后,你需要保存你的文件

保存样式盒以及字体变体

方法都是一样的,在对应属性下找到你的样式盒以及字体变体,右键并保存,此时会让你选择保存路径

保存场景

保存场景很简单,在编辑器中按下Ctrl + S即可,此时如果该场景没有保存为文件会让你选择保存路径

制作游戏一定要养成资源分类的习惯!

结束

这样你就完成了实现Galgame对话框系统的第一步,搭建了一个无头图的文本对话框

本系列话题实现的对话框类型是无头图对话框,可以通过逻辑在对话时在当前场景实现显示全/半身立绘,你可以根据你的需求做出更改

我所搭建的对话框场景本身只包含文本,以及对话框样式,这是对话框的一种基础类型,可以根据你的需求做出更改,例如在对话框场景添加功能按钮(对话时存档,打开系统菜单之类的)

之后的教程只基于当前的对话框场景进行,展示如何逐字显示文本,自动播放文本,右键关闭菜单等,以及各种拓展功能,我所使用的拓展功能会详细介绍,我未使用的拓展功能会提供实现思路,比如上述的对话框功能按钮以及显示立绘

下一个教程,我将会介绍如何用GDScriptC#编写一个UI管理器脚本来控制对话框的显示和关闭

UI管理器脚本是通用的,适用于所有Godot项目中

Topic status:Normal
214
=> fang_chu
Replied To @ fang_chu

网站的文本编辑的粗体功能有点难绷

14-10-2024 - 20:21

鲲

3811

=> fang_chu
Replied To @ fang_chu

看起来似乎没有太大的问题呀

image.png

14-10-2024 - 21:17

=>
Replied To @

文章下面...显而易见的*号

一句话两个部分加粗就会这样,用网站编辑器在不是整行加粗的行编辑也会直接出现*号,看代码那边好像是直接变成转义符了

15-10-2024 - 00:59

Comments
KUN
鲲 Commented to fang_chu
方不方便用其它 Markdown 编辑器,实现你想要的效果,然后截图发送
这样我才能知道你预期中的效果是什么样的
fang_chu Commented to
看文章中的*号你应该就知道我预期的效果是什么了,双引号所包含的英文都该被加粗,但是*号却被转义了
KUN
鲲 Commented to fang_chu
你需要在 ** 的外侧加一个空格才可以,或者用网站编辑器自带的加粗
kohaku