news 2026/6/17 1:37:27

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Godot】【入门】10 分钟做出第一个可玩 Demo(含完整节点结构+代码模板)

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

目标与准备

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

场景与节点结构

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 命名与路径保持英文,避免打包路径问题。

结语

  • 以上节点结构+脚本即是“最小可玩”2D Demo。关键在于:CharacterBody2D控制、Area2D收集、CanvasLayerUI、Input Map 默认动作。
  • 跑通一次后可迭代:加动画(AnimationPlayer/AnimatedSprite2D)、音效(AudioStreamPlayer)、相机(Camera2D)、更多关卡(多 TileMap 或加载 PackedScene)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:45:32

用户管理怕繁琐?JNPF批量导入 + 分组管控 + 权限交接一键搞定

企业用户多、分组乱,批量新增要手动录入、离职交接怕遗漏权限? JNPF 用户管理功能直接破解运维难题 —— 支持用户批量导入导出、自定义分组管理,还能实现密码重置、岗位调整、工作交接等全场景操作,第三方同步功能更能打通钉钉 …

作者头像 李华
网站建设 2026/6/15 13:54:17

超详细版framebuffer入门:帧缓冲区结构体字段解析

从零开始理解Framebuffer:深入解析帧缓冲区结构体在嵌入式系统和底层图形开发的世界里,framebuffer是一个绕不开的核心概念。它不像现代图形API那样华丽炫目,却像一块沉默的基石,支撑着无数设备的屏幕显示——从工业HMI到车载仪表…

作者头像 李华
网站建设 2026/6/15 14:18:49

语音合成API开发指南:基于GPT-SoVITS构建服务接口

语音合成API开发指南:基于GPT-SoVITS构建服务接口 在短视频、AI主播和有声内容爆发式增长的今天,一个现实问题摆在开发者面前:如何用最少的数据快速生成自然、富有表现力的定制化语音?传统语音合成系统往往要求数小时标注语音与昂…

作者头像 李华
网站建设 2026/6/15 19:12:03

openssh-master代码分析-sandbox-solaris.c

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 👇热门内容👇 python使用案例与应用_安城安的博客-CSDN博客 软硬件教学_安城安的博客-CSDN博客 Orbslam3&Vinsfusion_安城安的博客-CSDN博客 网络安全_安城安的博客-CSDN博客 教程_安城安的博客-CSDN博客 python办公…

作者头像 李华
网站建设 2026/6/15 12:39:44

24、提升WPF应用开发效率:CLINQ与控制设计技巧

提升WPF应用开发效率:CLINQ与控制设计技巧 在WPF应用开发中,数据绑定和控件设计是至关重要的环节。合理的数据绑定能够实现数据与界面的高效交互,而优秀的控件设计则能提升应用的性能、可维护性和用户体验。下面将为大家介绍CLINQ在数据绑定中的应用,以及一系列实用的控件…

作者头像 李华
网站建设 2026/6/15 12:40:11

【UI自动化测试】Jenkins配置

前一段时间帮助团队搭建了UI自动化环境,这里将Jenkins环境的一些配置分享给大家。 背景: 团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试&…

作者头像 李华