【Godot】【入门】10 分钟做出第一个可玩 Demo(含完整节点结构+代码模板)

新星杯·14天创作挑战营·第18期 10w+人浏览 324人参与

零基础也能照做:10 分钟做出“可左右移动+跳跃+收集金币”的 2D 小场景。文章给出节点树、资源占位、脚本模板和导出检查项,直接照抄即可跑通。
在这里插入图片描述

目标与准备

  • 目标:角色可左右移动、跳跃,碰到金币会消失并计数,掉出平台会重生。
  • 引擎版本:Godot 4.x。
  • 素材:可用纯色方块代替(不需要美术),在 Inspector 设置 Texture 为 ColorRect 或导入占位 PNG。
    可运行的Demo项目在绑定资源中,可自行下载学习。

场景与节点结构

Level.tscn
└── Node2D (root)
    ├── TileMap        # 地形/平台
    ├── Player (CharacterBody2D)
    │   ├── Sprite2D
    │   └── CollisionShape2D
    ├── CoinContainer (Node2D)
    │   ├── Coin (Area2D)
    │   │   ├── Sprite2D
    │   │   └── CollisionShape2D
    └── UI (CanvasLayer)
        └── Label

说明:用 CanvasLayer 做 UI,避免跟场景相机联动;金币用 Area2D 捕获进入事件。

快速搭建步骤

  1. 创建场景:新建 Level.tscn,Root 选 Node2D
  2. TileMap
    • 添加 TileMap,创建新 TileSet,添加一张占位方块纹理,定义碰撞形状。
    • 在 2D 视图绘制平台(至少地面和几个台阶)。
  3. Player
    • 添加 CharacterBody2D 命名 Player,子节点 Sprite2DCollisionShape2D(矩形即可)。
    • 在 Inspector 设置 CollisionShape2D 尺寸覆盖角色。
  4. Coin
    • 在 CoinContainer 下添加 Area2D 命名 Coin,子节点 Sprite2DCollisionShape2D(小圆形)。
    • 复制 Coin 多个,放在平台上方。
  5. UI
    • 添加 CanvasLayerLabel,锚点设为左上,文本初始 金币:0
  6. 脚本:为 Player 和 Level 分别创建脚本,见下文。
  7. 运行:按 F6 运行当前场景,确认可操作。

Player.gd:可直接粘贴

extends CharacterBody2D

@export var move_speed := 220.0
@export var jump_speed := 420.0
@export var gravity := 1200.0

var velocity_y := 0.0

func _physics_process(delta: float) -> void:
    var input_dir = Input.get_axis("ui_left", "ui_right")
    velocity.x = input_dir * move_speed

    # 重力
    if not is_on_floor():
        velocity_y += gravity * delta
    else:
        velocity_y = 0
        if Input.is_action_just_pressed("ui_accept"):
            velocity_y = -jump_speed
    velocity.y = velocity_y

    move_and_slide()

动作映射:默认 ui_left/ui_right/ui_accept 对应左右方向键和空格,无需额外配置。若要手柄支持,可在 Project Settings → Input Map 再添加。

Level.gd:收集金币与重生

extends Node2D

@onready var player := $Player
@onready var coin_container := $CoinContainer
@onready var ui_label := $UI/Label
var coin_count := 0
var spawn_position := Vector2.ZERO

func _ready():
    spawn_position = player.global_position
    for coin in coin_container.get_children():
        coin.body_entered.connect(_on_coin_collected.bind(coin))

func _on_coin_collected(body: Node, coin):
    if body == player:
        coin.queue_free()
        coin_count += 1
        ui_label.text = "金币:%d" % coin_count

func _process(_delta):
    if player.global_position.y > 1200:
        player.global_position = spawn_position
        player.velocity = Vector2.ZERO
  • 连接思路:遍历 Coin 容器统一绑定信号,避免逐个手动连。
  • 重生逻辑:检测 y 坐标超界,重置位置与速度。

让 10 分钟更稳:3 个验证点

  • 碰撞正常:在 2D 视图打开 “Visible Collision Shapes” 查看碰撞,确保 TileMap 与角色/金币都有形状。
  • Input Map:若移动/跳跃无响应,检查 Project Settings → Input Map 的键位,或是否选中了非英文输入法。
  • 节点引用:脚本路径 $UI/Label 等必须匹配 Scene 树命名,改名后记得同步。

扩展:下一步怎么改成自己的 Demo

  • 换美术:替换 Sprite2D 的纹理即可,碰撞尺寸记得调整。
  • 相机跟随:给 Player 加 Camera2D 设为 Current,限制边界防止露底色。
  • 简单敌人:用 Area2DCharacterBody2D 做巡逻,碰撞玩家后重生。
  • 存档分数:使用 FileAccess 保存最高分,或 ConfigFile 简化结构。

导出前检查清单

  • Project Settings → Display → Window 设置分辨率(如 1280×720),勾选 resizable 取决于需求。
  • Project → Export 添加目标平台模板(官方模板即可),测试打包后输入是否正常。
  • Assets 命名与路径保持英文,避免打包路径问题。
    可运行的Demo项目在绑定资源中,可自行下载学习。

结语

  • 以上节点结构+脚本即是“最小可玩”2D Demo。关键在于:CharacterBody2D 控制、Area2D 收集、CanvasLayer UI、Input Map 默认动作。
  • 跑通一次后可迭代:加动画(AnimationPlayer/AnimatedSprite2D)、音效(AudioStreamPlayer)、相机(Camera2D)、更多关卡(多 TileMap 或加载 PackedScene)。
### 普通文本型回答 为了帮助你更好地理解Godot引擎中的GDScript编程,下面将详细介绍如何开始编写GDScript代码,包括环境搭建、基本语法以及一些简单的代码示例。 #### 1. 安装与设置 首先,确保已经下载并安装了Godot引擎,可以从[官方网站](https://godotengine.org/)获取最新版本。安装完成后,启动Godot编辑器并创建一个新项目。熟悉Godot的界面布局和项目结构对后续学习非常重要。 #### 2. GDScript基础语法 GDScript是一种类似于Python的脚本语言,具有简洁易懂的特点。以下是几个重要的概念: - **变量**:用于存储数据值。例如 `$var name = "Godot"`。 - **函数**:一段可以重复使用的代码块。定义函数时使用 `func` 关键字,如 `func greet(): print("Hello, Godot!")`。 - **条件语句和循环**:用于控制程序流程。如 `if` 语句、`for` 循环等。 #### 3. 创建第一个GDScript脚本 在Godot中,脚本通常附加到特定的节点上。下面是一个简单的例子,演示如何让一个精灵(`Sprite`)根据用户的按键移动: ##### 步骤: 1. 创建一个新场景,添加一个`Sprite`节点,并为其分配一个纹理(如角色图像)。 2. 选中`Sprite`节点,点击“附加脚本”,选择GDScript并保存脚本文件。 3. 编写以下代码: ```gdscript extends Sprite # 定义速度常量 const SPEED = 200 # 在每帧调用,delta表示时间间隔 func _process(delta): # 检测右箭头是否按下 if Input.is_action_pressed("ui_right"): position.x += SPEED * delta # 检测左箭头是否按下 if Input.is_action_pressed("ui_left"): position.x -= SPEED * delta ``` #### 知识点 1. **GDScript语法**:涵盖变量定义、函数声明等基本元素。 2. **输入处理**:利用`Input`类响应用户输入,如键盘按键。 3. **节点操作**:通过`position`属性控制节点的位置变化。 通过这些步骤,你可以快速上手GDScript编程,并开始构建自己的游戏逻辑。随着实践的深入,你会逐渐掌握更多高级功能和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术小甜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值