零基础快速上手 Godot 游戏开发:godot-demo-projects 官方演示案例完整指南
2026/9/18 2:31:47 网站建设 项目流程

零基础快速上手 Godot 游戏开发:godot-demo-projects 官方演示案例完整指南

【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects

godot-demo-projects 是 Godot 官方维护的演示项目集合,40 多个可直接运行的 2D/3D 实战案例。对零基础开发者来说,不用从零搭项目:打开场景就能跑,照着改几个变量,一天就能摸到输入、物理、寻路的门道。

项目速览:clone 下来怎么跑

打开终端,一行命令拉下来:

git clone https://gitcode.com/GitHub_Trending/go/godot-demo-projects

用 Godot 打开任意一个子目录里的 project.godot,点运行按钮,画面就出来了——每个子项目都是独立的小游戏,互不干扰。想玩 2D 就去 2d/ 目录挑,想做 3D 就去 3d/ 目录挑。建议按下面这条路线走:先 2D 入门,再玩物理关卡,然后进 3D,最后调画质、学寻路。

第 1 站|2D 入门:3 分钟跑通第一个 2D 案例

跑起来先看到什么:运行 2d/dodge_the_creeps/ 后,一个笑脸角色站在屏幕中央,四周的怪物不断朝你冲过来,右上角分数随存活时间上涨。

背后的一个原理:玩家本体是一个 Area2D,每帧读取按键算出速度向量,直接累加到坐标上。怪物由 Timer 定时生成,玩家的碰撞体一碰到怪物就发信号,分数和结束逻辑全靠这条信号串起来。

值得抄的一段代码(player.gd,输入到移动的全部核心):

func _process(delta): var velocity = Vector2.ZERO if Input.is_action_pressed(&"move_right"): velocity.x += 1 if Input.is_action_pressed(&"move_left"): velocity.x -= 1 if velocity.length() > 0: velocity = velocity.normalized() * speed position += velocity * delta

改哪个变量效果最明显:@export var speed = 400,改成 800 你会发现自己快过怪物的刷新,改到 100 则基本只能站着挨打。

动手改一改:打开 main.gd,把_on_MobTimer_timeout里怪物的速度区间randf_range(150.0, 250.0)改成randf_range(300.0, 400.0),再运行——难度瞬间翻倍,10 分钟内就能看到分数曲线变化。

第 2 站|物理关卡:重力、摩擦与跳跃手感从哪来

跑起来先看到什么:进入 2d/physics_platformer/ 后,一个小人在平台上跑、跳、放子弹,站在跷跷板上还能被带着走。

背后的一个原理:这个玩家不是 CharacterBody2D,而是 RigidBody2D,靠重力天然往下掉。跳跃手感不是调一个"跳跃力"就能搞定的,而是走/停加速度、跳跃初速度、空中减速这一组参数共同作用的结果。

值得抄的一段代码(player.gd,手感参数集中在这几个常量):

const WALK_ACCEL = 1000.0 const WALK_MAX_VELOCITY = 200.0 const JUMP_VELOCITY = 380.0 const STOP_JUMP_FORCE = 450.0 # 落地且按下跳跃时 if not jumping and jump: velocity.y = -JUMP_VELOCITY jumping = true

改哪个变量效果最明显:JUMP_VELOCITY = 380.0。往下调到 200 变成小碎跳,调到 600 直接蹦出关卡,这是"手感"最直观的来源。

动手改一改:把WALK_ACCEL从 1000 降到 300,你会发现起步变得黏糊、落地刹不住车——这正是平台游戏里"摩擦力"手感的来源,不用额外写摩擦逻辑。

第 3 站|3D 上手:移动、相机与踩踏判定一次看全

跑起来先看到什么:打开 3d/squash_the_creeps/,角色在地台上移动,小怪物从四周一窝蜂地追你,跳起来踩中怪物,它被压扁并加分。

背后的一个原理:玩家是 CharacterBody3D,每帧写入 velocity 再调用 move_and_slide(),重力每帧累加保证始终贴着地面。相机挂在跟随节点下,跟着玩家转。踩踏不是靠"碰到就死",而是检查碰撞法线朝上,才判定为"踩在头顶"。

值得抄的一段代码(Player.gd,踩踏判定的关键几行):

for index in range(get_slide_collision_count()): var collision = get_slide_collision(index) if collision.get_collider().is_in_group(&"mob"): if Vector3.UP.dot(collision.get_normal()) > 0.1: collision.get_collider().squash() velocity.y = bounce_impulse break

改哪个变量效果最明显:脚本顶部的@export var jump_impulse = 20,提到 30 可以连续踩跳串烧怪物,降到 12 则基本只能一次跳一个高度。

动手改一改:把fall_acceleration = 75改成 300,角色下落会像石头一样砸地,空中转向几乎无效——这就是"重力感"的 3D 版调节旋钮。

2D/3D 节点选型速查

你想实现的效果该用哪个节点去哪站抄代码上手难度
平面自由移动、不用物理Area2D + 每帧改 position第 1 站★☆☆
平台跳跃、贴地行走RigidBody2D 或 CharacterBody2D第 2 站★★☆
3D 角色移动 + 跳跃CharacterBody3D + move_and_slide()第 3 站★★☆
碰撞触发计分/死亡Area2D 的 body_entered 信号第 1、3 站★☆☆

第 4 站|画质调优:渲染模式和抗锯齿怎么选

跑起来先看到什么:打开 3d/antialiasing/,一个 3D 场景配上右侧控制面板和左上角实时 FPS,切不同抗锯齿模式时画面边缘的锯齿变化肉眼可见。

背后的一个原理:抗锯齿都挂在 viewport 上,一行属性就能切换,代价各不相同:MSAA 最干净但最吃性能,TAA 平滑一切却可能拖影,屏幕空间 AA(FXAA/SMAA)快但会轻微糊掉全屏。项目用 FPS 标签实时显示每种模式的真实开销。

值得抄的一段代码(anti_aliasing.gd,切换入口都在这里):

# 多采样抗锯齿:质量最高,最慢 get_viewport().msaa_3d = Viewport.MSAA_4X # 时间抗锯齿:全面平滑,可能有拖影 get_viewport().use_taa = true # 屏幕空间抗锯齿:快,但整体略糊 get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_SMAA

改哪个变量效果最明显:右侧"Render Scale"滑块背后的get_viewport().scaling_3d_scale,拉到 50% 帧数立刻翻倍,再配合 FSR 放大,是低配机器的首选组合。

动手改一改:在 Compatibility 渲染模式下运行同一项目,对比 MSAA 选项自动消失的逻辑(脚本里is_compatibility分支),10 分钟理解"渲染方法决定可用画质选项"这件事。

渲染模式与抗锯齿速查

想要的画面效果对应设置代价适合场景
边缘最干净MSAA 4X/8X帧数掉最多高端机、演示
整体平滑无颗粒TAA运动中可能拖影动态镜头
便宜够用FXAA / SMAA全屏略糊中低端机
直接省一半算力Render Scale 50% + FSR分辨率减半低配兜底

第 5 站|导航寻路:目标点怎么算、路线怎么画

跑起来先看到什么:运行 2d/navigation_astar/,一张太空风格的网格地图,左键点击任意空地,角色就沿着白色轨迹绕开障碍走过去,右键可以直接传送。

背后的一个原理:地图用 AStarGrid2D 表示,把每个已铺瓦片的格子标成实心(不可走),寻路时算出整条路径点列表。角色并不"理解"地图,它只是一帧一帧走向路径上的下一个点,到了就取下一个,走完回 IDLE 状态。

值得抄的一段代码(pathfind_astar.gd,建图与取路核心):

var _astar := AStarGrid2D.new() _astar.region = Rect2i(0, 0, 18, 10) for pos in get_used_cells(): _astar.set_point_solid(pos) _astar.update() _path = _astar.get_point_path(start, end)

改哪个变量效果最明显:character.gd 里的speed: float = 200.0,降到 50 角色慢吞吞地挪,升到 500 则像瞬移一样贴着路线飞。

动手改一改:把 character.gd 里的ARRIVE_DISTANCE: float = 10.0改成 60,角色会在离终点很远时就判定"到达"提前停住——这个参数就是寻路角色"刹不住车"的常见元凶。

学完这一圈你能做什么

跑完 5 站,你手上已经有了四样东西:一套"输入 → 移动 → 碰撞 → 计分"的完整 2D 循环、一组调平台手感的常量表、一个 3D 角色移动 + 踩踏判定的模板,以及一套抗锯齿和寻路的现成代码。这些拼起来,一个可玩的原型就出来了。

下一步路线:

  • 2D 方向:把 dodge_the_creeps 加血条和道具,读完 2d/ 里的 platformer 和 role_playing_game 补全战斗逻辑。
  • 3D 方向:照着 squash_the_creeps 给怪物加状态机,参考 3d/ 里的 voxel 和 platformer 做完整关卡。
  • 性能方向:在 antialiasing 项目里把 Render Scale、FSR、V-Sync 三档组合跑一遍,记下每种组合的 FPS 差异。

相关资源:

  • 官方文档与项目说明:README.md
  • 全部 2D 案例:2d/
  • 全部 3D 案例:3d/
  • C# 版本示例:mono/

【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询