使用 Godot 进行游戏开发 🤖

Skip to content

这是一篇机器翻译文本,可能包含错误!

这一信息来自哪里?

很多内容只是对 Godot 官方文档的重述。下方是一些有用的链接到官方文档(我更推荐使用这些,但如果您更喜欢在 Piggy 上使用这个,那就随意!)

有用的资源:

关于图形,我必须自己制作吗?

不!你们可以在这里找到很多免费资源:

其他有用的链接:

其他游戏引擎?

如果您更喜欢,可以使用其他游戏引擎。其他游戏引擎的例子包括:

还有很多其他的,如果您想尝试其他东西,请随意搜索!

什么是 Godot?

Godot (发音为 Guh-doh),是一个“游戏引擎”。 简单来说,它是一个允许你创建游戏(或常规程序,如果你愿意)的程序。 Godot 可以做其他游戏引擎可以做的绝大多数事情,包括 2D 和 3D。

游戏示例:Godot Showcase

不仅是独立游戏是在 Godot 中创建的,Sonic Colors Ultimate 也是使用 Godot 制作的!

如何获取 Godot?

你可以从以下位置下载 Godot:

只需下载并安装(或在 steam 上运行)。

設置一個專案!

當你啟動 Godot 時,你會看到這個視窗:

Godot 專案

在這裡,你會被詢問程式設計語言,GDScript 或 C#。 GDScript 非常像 Python。

GDScript 和 Python 之間的差異(沒有顏色):

def hello():
    text = "Hello world!"

    print(text)
func hello():
    var text = "Hello world!"

    print(text)

對於 Python 中的變數,你只需要寫變數的名稱。 在 GDScript 中,你必須先寫 var。 要創建函數,你寫 func 代替 def

Scenes & Nodes

一个 Godot 中最重要的概念是 Scenes 和 Nodes。我们可以从 Nodes 开始。一个 node 是 Godot 中的一个对象,它可以代表任何东西。它可以代表一个玩家,一个敌人,一个菜单中的按钮,屏幕上的文本,各种各样的东西。Scenes 是一个节点的集合。

这里我们将创建一个非常简单的例子。

第 1a 部分 - 设置“player”场景

在 Godot 窗口的顶部,点击“2D”按钮以将视图更改为 2D 视图。

在窗口的左侧,您将看到以下界面:

Create Scene

点击“Other Node”按钮,搜索“CharacterBody2D”,选择它并点击“Create”。 这是一种用于 2D 玩家的节点。 您可能会看到“CharacterBody2D”节点旁边有一个警告三角形 ⚠️。 这是因为缺少它希望拥有的某些内容。

如果您右键单击节点,则有一个“+ Add Child Node…”按钮。 使用此按钮添加两个节点,Sprite2D 和 CollisionShape2D。 Sprite2D 用于在玩家身上添加一些图形,而另一个用于检查碰撞。 您也可以根据需要给它们命名,以便更容易跟踪。 我将我的 CharacterBody2D 命名为“Player”。 场景现在应该如下所示:

Scene currently

第 1b 部分 - 修复 ⚠️ CollsionShape2D

警告三角形在此情况下表示 CollsionShape2D 缺少实际碰撞。 您可以通过点击节点(左侧),然后在 侧显示面板来修复此问题。 在这里,您将获得大量关于您可以更改的节点信息。 随意尝试一下。 但我们将重点关注的是“Shape”,将其设置为例如 RectangleShape2D。 这并不很重要,我们将不使用这些碰撞。

第 1c 部分 - 添加 Sprite、图形

如果您点击左侧的 Sprite2D,您将看到右侧出现一个字段,其中显示“Texture”。 您可以在此处放置玩家的图像。 只需将图像拖动到该字段中即可。

添加精灵后的效果如下所示。

Sprite menu

第 2 部分 - 添加输入,控制

在窗口顶部有一个菜单,”场景 - 项目 - 调试 - 编辑器 - 帮助”。点击 “Project” 然后点击 “Project Settings”。在这里你会看到一个包含大量设置的菜单。点击 “Input Map”。在这里你可以设置键盘上的按键。

  • 在 “Add New Action” 字段中,输入 “left” 然后点击 “Add”。
  • 随后添加 “right”、”up” 和 “down”。
  • 这些会被识别为 “Actions”
  • 在每个 “Action” 上,你可以通过点击右侧的 + 按钮来添加按键。

Plus button

  • 在这里只需点击键盘,然后点击 Add。
  • 为所有 actions 添加按键。

第 3 部分 - 添加一个脚本来控制玩家。

为了能够添加游戏逻辑,也就是对玩家、背景,或者游戏中任何其他事物做一些事情,我们需要一个脚本。脚本是代码,可以用两种语言编写,GDScript 或 C#,GDScript 是默认的。

  • 点击 “CharacterBody2D” (我将其命名为 “Player”) 节点。
  • 点击 “Attach Script” 按钮 (见下文)

Attach script button

  • 在这里,您会弹出一个窗口,您可以在其中选择语言(选择 GDScript)和路径(只需让它保持默认名称,但您可以给它命名),然后继续。在这里,您会弹出一个“Script”窗口。最初这里没有什么内容。

extends CharacterBody2D
# Dette er en karakterfigur i et 2D-spill.
# 这是一个2D游戏中一个角色。

目前这段代码只是声明这段代码属于一个“CharacterBody2D”类型的节点,也就是我们的玩家。

我们将在这里添加一个函数,用于操纵玩家:

extends CharacterBody2D

func _physics_process(delta: float) -> void:
   # Dette er en tom funksjon.
   # 这是一个空函数。
   return

物理过程?

_physics_process 是一个函数,它在每一个“帧”中更新,大约每秒 60 次(默认)。 还有一个名为 _process 的函数,它会全面更新。 如果你想让玩家以平稳的速度移动,就使用 _physics_process

这里我们将添加移动玩家的代码。

第 4 部分 - 基本输入

在第 2 部分中,你添加了输入按钮,现在我们将使用它们。 存在一个名为 Input 的内置 对象,我们可以使用它来检查玩家是否按下了我们在“输入映射”中设置的按钮。

尝试将此代码放入 _physics_process 代码中:

if Input.is_action_pressed('right'):
   # Hvis høyre tasten trykkes, sett x-hastigheten til 100
   # 如果按下右键,将x速度设置为100
   velocity.x = 100

move_and_slide()

什么是 move_and_slide()

move_and_slide() 是 Godot 内置函数,用于实际移动它所应用的物体。如果没有它,玩家将无法移动。

Warning

行之间的空格非常重要,这与 Python 中的情况类似。

当你按下 Godot 窗口中的播放按钮后,再按下“right”时会发生什么?

如果现在什么也没发生:

  • 你记得在“Input Map”中设置了什么吗?
  • 你写的是 right 而不是 Right 吗?也就是说,你代码中写的和你输入映射中的名称是否相同?

迄今为止的全部代码
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

現在嘗試添加 `'left'`, `'up'`, `'down'` 的代碼。

`velocity.x` 對於 `left` 必須是什麼? 對於 `up``down` 呢?

完整的代码如下
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

第 5 部分 - 修复代码

你们可能注意到,当松开方向键时,玩家不会停止。现在我们可以修复这个问题!

在所有 if 语句之前,添加一行将速度设置为 0。你可以通过编写 velocity = Vector2() 来实现。

Godot 中的所有速度和方向都是 向量,这是一个我们现在不需要深入探讨的数学概念,但如果你想了解更多关于它的含义,可以访问这里:Wikipedia vectors

完整的代码如下
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

当你现在开始游戏时,你可以移动角色:

此外,你可以修改代码,使速度不仅仅是一个数字,而是可以存储在其他地方。

你可以例如(在函数之前)添加一个*常量*来跟踪速度。

整个代码在最后使用 const
extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

第 6 部分 - 自行探索!

如果您回顧第一部分,有用的資源,您可以找到可以繼續探索的內容。

接下來,您可以嘗試創建您自己的遊戲。您製作的是什麼取決於您!如果您想創建一些全新的東西,那就去做吧!如果您想嘗試模仿現有的遊戲,那就去做吧!學習的最佳方法就是嘗試!