资讯详情

资讯详情

零基础 Godot 游戏开发教程:用 godot-demo-projects 的 40 多个演示学会做 2D/3D 游戏

零基础 Godot 游戏开发教程用 godot-demo-projects 的 40 多个演示学会做 2D/3D 游戏【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projectsgodot-demo-projects 是开源引擎 Godot 的官方演示项目集合收录了 40 多个可直接运行的 2D/3D 游戏案例。本文按学习路径带你跑通第一个演示、读透 4 个最有代表性的案例看完就能把里面的做法搬进自己的项目。初识这个项目能做什么先说结论这个仓库不是「游戏成品合集」而是一套「功能样例库」——每个包含project.godot的子文件夹都是一个完整的独立 Godot 项目你可以直接打开、运行、改代码。它适合三类人刚接触 Godot 的新手从这里建立对节点、脚本、场景的直观认识、从 Unity/Unreal 迁移过来想快速对照 API 的开发者以及想同时看 GDScript 和 C# 两种写法的学习者mono/目录里有对应 C# 版本。仓库采用 MIT 协议案例代码可以直接借鉴到自己的项目里。按你感兴趣的方向选起点下面是案例方向总览方向代表案例能学到什么上手难度2D 游戏玩法2d/pong、2d/dodge_the_creepsArea2D 碰撞、信号通信、玩家移动入门2D AI 导航2d/navigation、2d/navigation_astar导航网格、点击寻路简单2D 动画与特效2d/tween、2d/particlesTween 补间工具、粒子系统简单3D 角色控制3d/kinematic_characterCharacterBody3D、相机跟随、重力进阶3D 渲染光照3d/lights_and_shadows、3d/antialiasing灯光阴影、抗锯齿、体积雾进阶联机多人networking/multiplayer_pong高层多人 API、状态同步进阶C# 开发mono/pong、mono/dodge_the_creeps同一案例的 C# 实现看基础第一个演示怎么跑起来先执行git clone https://gitcode.com/GitHub_Trending/go/godot-demo-projects把仓库拉到本地然后打开 Godot 的项目管理器点「扫描Scan」并选中仓库目录所有演示会一次性出现在列表里。挑一个你最有感觉的新手建议2d/pong双击进入后按 F5 运行主场景即可。一句话小结把仓库当「按功能分类的教材」先扫目录选方向再单个打开演示项目跑起来。代表案例深度拆解从易到难先看这 4 个下面按「最小玩法 → 2D 玩法完整闭环 → 2D AI → 3D 角色控制器」的顺序拆 4 个案例每个都只讲最值得带走的一两块知识。2d/pong教你用「信号」把游戏交互串起来为什么选它整个项目只有 4 个脚本、1 个主场景是理解 Godot「信号Signal」机制的最小样本官方定位就是「最佳实践演示」。核心思路球、挡板、墙全部是Area2D节点而不是刚体互相之间不发生物理推挤。球碰到挡板或墙壁时对应区域发出进入信号球的脚本监听到信号后反转方向、加分——碰撞检测和业务逻辑完全解耦这是 Godot 里处理「碰到某物就发生某事」最推荐的写法。关键实现信号连接主要配置在2d/pong/pong.tscn场景文件里代码侧你只需要关注球和挡板各自对信号做了什么逻辑非常薄一句话说清Area2D 发信号 → 球脚本改方向和分数。你可以再试试把球的反弹角度改成「取决于球击中挡板的位置」或者在mono/pong里对照同一玩法的 C# 写法体会两种语言的差异。2d/dodge_the_creeps教你玩家移动与受击判定的完整闭环为什么选它这是 Godot 教程圈最经典的入门案例一个项目里同时覆盖了键盘输入、屏幕边界约束、动画切换、碰撞受击四种基本功学完它 2D 游戏的骨架就齐了。核心思路玩家是一个Area2D每帧读取方向键输入拼出速度向量做归一化后乘以固定速度这样斜着走不会比横着走快再按delta积分到位置上最后用clamp限制在屏幕内。受击时玩家隐藏自己并发出hit信号通知主场景碰撞形状用延迟方式禁用避免在物理回调里直接改物理状态。关键实现2d/dodge_the_creeps/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_down): velocity.y 1 if velocity.length() 0: velocity velocity.normalized() * speed position velocity * delta你可以再试试把「碰到怪物就消失」改成带 3 条命的系统或者给玩家加一段受击后的无敌闪烁时间。2d/navigation教你让 AI 点击即走导航网格寻路为什么选它「点哪里走到哪里」是 2D 游戏 AI 最常见的需求这个案例用 Godot 的导航系统几乎零手写寻路算法就实现了是理解NavigationRegion2D的最佳入口。核心思路地图上有NavigationRegion2DNavigationPolygon描述可行走区域角色身上的NavigationAgent2D会基于网格自动算出一条路径。你只需要在鼠标点击时把目标位置交给 agent然后每帧读取「下一个路径点」朝它方向以固定速度移动即可——寻路算法全部由引擎完成。关键实现2d/navigation/character.gd节选func _physics_process(_delta: float) - void: if navigation_agent.is_navigation_finished(): return var current_agent_position: Vector2 global_position var next_path_position: Vector2 navigation_agent.get_next_path_position() velocity current_agent_position.direction_to(next_path_position) * movement_speed move_and_slide()你可以再试试加 5 个角色一起追同一个目标观察它们如何避让或者对比2d/navigation_astar里手动 A* 网格寻路的做法体会两种方案的取舍。3d/kinematic_character教你把 2D 角色控制器平移到 3D 世界为什么选它CharacterBody3D是 3D 游戏里角色控制的基石这个案例把移动、重力、跳跃、相机跟随、坠落重置全放进一个不到 70 行的脚本里是 2D 到 3D 过渡的最短路径。核心思路输入方向不直接用世界坐标而是取相机朝向的基矩阵去掉俯仰角后来旋转输入向量这样「W 前进」永远是远离相机的方向跟视角走。水平速度用lerp做加速度/减速度插值让起步和刹车更自然垂直方向交给重力每帧最后调move_and_slide()让引擎处理碰撞滑动。掉出地图按下重置键时位置被直接传送同时必须调用reset_physics_interpolation()清掉物理插值否则相机会从旧位置平滑「飘」回新位置看起来就像鬼畜。关键实现3d/kinematic_character/player/cubio.gd节选var dir : Vector3() dir.x Input.get_axis(move_left, move_right) dir.z Input.get_axis(move_forward, move_back) var cam_basis : camera.global_transform.basis cam_basis cam_basis.rotated(cam_basis.x, -cam_basis.get_euler().x) dir cam_basis * dir velocity get_gravity() * delta move_and_slide()你可以再试试给它加上空中二段跳限制一次或者把移动手感参数ACCELERATION/DECELERATION调大调小体会数字如何直接映射到「手感」。一句话小结这 4 个案例分别对应「交互机制、玩法闭环、AI 寻路、3D 控制器」按顺序读下来Godot 的角色开发主链路就通了。按你的目标做选择你决定做什么再回头看目录而不是反过来目标类型推荐技术组合参考案例目录2D 休闲小游戏躲避/打砖/弹球Area2D 信号 AnimatedSprite2D2d/pong、2d/dodge_the_creeps带关卡的平台跳跃CharacterBody2D TileMap AnimationPlayer2d/physics_platformer、2d/platformer2D 含 AI 寻路的玩法NavigationRegion2D NavigationAgent2D2d/navigation、2d/navigation_astar3D 角色动作游戏CharacterBody3D move_and_slide 相机跟随脚本3d/kinematic_character、3d/rigidbody_character3D 画面表现力Light3D / Sky / Shader / 抗锯齿设置3d/lights_and_shadows、3d/antialiasing、3d/volumetric_fog联机多人高层多人 APIHigh-level Multiplayer或 WebSocketnetworking/multiplayer_pong、networking/websocket_chat团队用 C# 开发同功能 C# 案例对照学习mono/pong、mono/dodge_the_creeps三点建议第一目标定好后直接打开对应案例的 README它们会写明语言和渲染器要求比翻代码更快第二如果同一个玩法在2d/、3d/、mono/都有比如 pong优先读与你技术栈一致的那份第三演示项目刻意把问题简化了做真实游戏时再按官方文档补齐存档、资源管理这些「工程化」部分。一句话小结先定目标再选目录同一案例多版本对照读能省掉大量找例子的时间。⚠️ 新手常踩的坑坑 1打开演示后脚本报错、节点类型不识别。原因是引擎版本和演示不匹配——仓库的master分支对应 Godot 下一个 4.x 开发版而各稳定分支对应相应稳定版。规避用哪个版本的 Godot就切到仓库对应的分支再跑。坑 2在项目管理器里「跑错了项目」运行的不是你看的那个演示。原因仓库根目录没有project.godot每个子文件夹才是独立项目扫描后它们各自注册。规避始终从目标演示自己文件夹下的project.godot进入不要试图把整个仓库当成一个项目打开。坑 3运行时弹出「不能修改物理属性」类错误。原因是你在物理回调比如body_entered信号里直接修改了CollisionShape的物理状态Godot 只允许延迟修改。规避像2d/dodge_the_creeps/player.gd里那样用set_deferred(disabled, true)代码里的注释也专门解释了这一点。坑 4角色速度随显示器刷新率变化60Hz 和 144Hz 上手感不一样。原因是位移没按帧时间积分或者把物理逻辑放在了与帧率强绑定的流程里。规避位移一定乘上delta物理相关逻辑放进_physics_process。顺带一个性能建议纯粹用来「检测碰到没」的物体子弹、拾取物、触发区用Area2D就够了别上真实刚体物理开销可以省一大截。坑 53D 角色传送/重置后相机和模型像「飘」了一段才归位。原因是 Godot 的物理插值会平滑两帧之间的位置而直接改position绕过了它。规避传送后调用reset_physics_interpolation()3d/kinematic_character/player/cubio.gd的重置逻辑里就是这样处理的。一句话小结版本、项目边界、延迟修改、delta 积分、插值重置——这 5 个坑解决掉90% 的「代码明明没错却不对劲」都会消失。最后资源速查建议学习顺序2d/pong→2d/dodge_the_creeps→2d/navigation→3d/kinematic_character一天能走完前两个第三天碰 3D 正好。README.md仓库导入方式、分支与引擎版本对应关系2d/全部 2D 演示案例28 个方向3d/全部 3D 演示案例角色、渲染、物理networking/联机与多人演示mono/同套演示的 C# 版本【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →