示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载本文以 godot-demo-projects 仓库中 mono/README.md 为骨架系统梳理该目录下全部基于 C#.NET编写的 Godot 演示项目包括其运行前提.NET 版 Godot、语言与渲染器选型以及 2.5D、Pong、Dodge the Creeps、Squash the Creeps、多人 Pong 与 Android 内购六个子项目的设计与源码要点。读完本文你将清楚每个 C# 演示项目演示了什么、如何运行、背后依赖哪些节点与脚本机制并可直接对照 GDScript 版本学习两种语言的工程差异。一、mono 目录是什么仓库顶层 README.md 说明凡是包含project.godot文件的文件夹都是一个独立的演示项目面向开源游戏引擎 Godot 设计。而 mono/README.md 则明确了 mono 目录的定位——这一整组演示项目全部使用 C# 编写其名称 mono 指代 Godot 官方支持的 .NETMono脚本后端。mono 目录共收录六个演示项目子目录演示主题渲染器mono/pong经典 Pong 双人对战2DCompatibilitymono/dodge_the_creeps“你的第一个 2D 游戏”教程完成版Compatibilitymono/squash_the_creeps“你的第一个 3D 游戏”教程完成版Forwardmono/2.5d2D/3D 混合的 2.5D 场景与编辑器插件Compatibilitymono/multiplayer_pong本地多人 PongHost/JoinCompatibilitymono/android_iapAndroid 应用内购买IAPCompatibility渲染器说明总览文档声明 mono 全部项目使用 Compatibility 渲染器唯一例外是 mono/squash_the_creeps/README.md 明确标注自身使用 Forward 渲染器对应其 3D 光照与阴影需求。这是可以从仓库各子项目 README 直接核实的实际情况。二、运行前提必须使用 .NET 版 GodotC# 脚本并非内置脚本语言而是由 .NET 运行时支撑的官方脚本方案。因此 mono/README.md 特别强调要运行这些演示必须使用 .NET 版本的 Godot即官方发布页中带 .NET/Mono 字样的编辑器构建普通版 Godot 无法解析*.cs脚本与.csproj工程文件。从工程文件可以确认这一技术栈例如 mono/pong/Pong with C#.csprojProject SdkGodot.NET.Sdk/4.7.0/Project该 SDK 版本号表明项目基于 Godot 4.7master 分支对应 4.x 后续版本并采用 Godot 官方提供的 .NET SDK 构建系统。这也是整个 mono 目录共享的 C# 工程形态——每个子项目都同时带有.sln解决方案文件与.csproj工程文件如 mono/2.5d/2.5D Demo with C#.sln。C# 脚本的类形态C# 脚本统一继承自 Godot 节点类型并以partial class声明例如 mono/pong/Logic/Ball.csusing Godot; public partial class Ball : Area2D { private const int DefaultSpeed 100; public Vector2 direction Vector2.Left; private Vector2 _initialPos; private double _speed DefaultSpeed; public override void _Ready() { _initialPos Position; } public override void _Process(double delta) { _speed delta * 2; Position (float)(_speed * delta) * direction; } public void Reset() { direction Vector2.Left; Position _initialPos; _speed DefaultSpeed; } }这段代码展示了 C# 演示的典型写法用[Export]属性暴露编辑器可调参数、用override实现 Godot 虚方法_Ready、_Process并可直接使用 Godot 的数学类型Vector2。命名风格上C# 方法名采用 PascalCase而调用 Godot 引擎自带方法时仍需使用其 snake_case 原名详见下文 Dodge the Creeps 一节。三、语言与渲染器选型mono/README.md 对全目录做了两条统一说明语言所有项目都包含 C# 脚本唯一例外是 mono/2.5d它在 C# 之外还包含少量 GDScript用于编辑器插件辅助逻辑形成“C# 为主、GDScript 为辅”的混合形态。渲染器统一使用 Compatibility 渲染器兼容模式该渲染器面向低端设备与 Web 导出基于 OpenGL 3.3/GLES 3.0能最大程度保证各平台表现一致3D 演示 mono/squash_the_creeps 属于例外使用 Forward。四、六个 C# 演示项目逐个拆解4.1 Pong with C#信号Signal最佳实践mono/pong/README.md 将该项目定位为“展示 Godot C# 游戏开发最佳实践”核心是信号系统的运用。墙、球拍、球全部使用Area2D节点当球碰到墙或球拍时碰撞方发出信号由球接收并修改自身的运动状态球的运动与重置逻辑集中在 mono/pong/Logic/Ball.cs 中_Process内按delta积分位移同时速度随时间线性递增_speed delta * 2制造“越打越快”的经典 Pong 手感Reset()负责回到初始位置并重置方向与速度。同一个演示还提供 mono/pong/Pong with C#.sln 工程文件其余逻辑类球拍Paddle、墙体Wall、天花板/地板CeilingFloor均以public partial class ... : Area2D的形式组织在 mono/pong/Logic 目录下便于对照学习。对照学习该演示存在对应的 GDScript 版本 2d/pong是体验 C# 与 GDScript 两种写法差异的最小入口。4.2 Dodge the Creeps2D 入门教程的 C# 完成版mono/dodge_the_creeps/README.md 说明这是一个“躲避敌人尽可能久”的小游戏也是 Godot 官方文档《你的第一个 2D 游戏》教程的C# 移植完成版推荐配合官方教程学习其完整设计过程。其脚本结构如下mono/dodge_the_creeps/Main.cs主控节点负责游戏流程计分、开始/结束、计时器启停mono/dodge_the_creeps/Mob.cs敌人行为mono/dodge_the_creeps/HUD.cs界面更新mono/dodge_the_creeps/Player.cs玩家移动。其中 mono/dodge_the_creeps/Main.cs 的NewGame()方法集中展示了 C# 调用 Godot API 的关键注意事项// Note that for calling Godot-provided methods with strings, // we have to use the original Godot snake_case name. GetTree().CallGroup(mobs, Node.MethodName.QueueFree);即C# 自定义方法使用 PascalCase但调用引擎原生方法时仍须使用引擎的 snake_case 名称此处通过Node.MethodName.QueueFree引用。这是从 GDScript 迁移到 C# 时最常见的踩坑点值得特别留意。美术与音频资源的授权信息也一并记录在项目 README 中音乐出自 HorrorPenCC-BY 3.0图片来自 kenney.nl 的 “Abstract Platformer” 素材包CC0字体为 XoloniumSIL OFL详见 mono/dodge_the_creeps/README.md 的 License 小节。4.3 Squash the Creeps3D 入门教程的 C# 完成版mono/squash_the_creeps/README.md 是官方《你的第一个 3D 游戏》教程的 C# 完成版玩家移动跳跃踩扁尽可能多的敌人每踩一个得 1 分。操作方式完整罗列如下动作键盘 / 鼠标 / 手柄向上移动↑/W/ 手柄左摇杆向下移动↓/S/ 手柄左摇杆向左移动←/ 手柄左摇杆向右移动→/ 手柄左摇杆跳跃Space/鼠标右键/ 手柄 A / Cross项目 README 明确列出该演示覆盖的知识点处理玩家输入3D 游戏中的移动与跳跃在竞技场四周随机生成敌人使用内置动画编辑器让游戏“活起来”构建包含失败条件、计分与重开能力的完整游戏循环。这是全目录中唯一使用Forward 渲染器的项目适合观察 3D 光照、阴影与动画系统在 C# 工程中的完整集成方式。4.4 2.5D Demo with C#混合 2D/3D 与编辑器插件mono/2.5d/README.md 是技术含量最高的一个子项目通过混合 2D 与 3D 节点创建 2.5D 游戏并附带一个专用的 2.5D 编辑器视口便于直观地编辑 2.5D 关卡。其语言为 C# 加少量 GDScript。核心机制Node25D 与坐标变换结构插件注册了自定义节点类型核心是所有 2.5D 物体的基类Node25D第一个子节点必须是 3D 节点Spatial/Node3D用于计算位置之后添加 2D Sprite或类似 2D 节点负责显示。在Node25D内部两个新结构体Basis25D与Transform25D负责把 3D 位置换算为 2D 位置。从源码 mono/2.5d/addons/node25d-cs/Node25D.cs 可以看到关键实现细节[Tool] public partial class Node25D : Node2D, IComparableNode25D { /// summary /// The number of 2D units in one 3D unit. Ideally, but not necessarily, an integer. /// /summary public const int SCALE 32; [Export] public Vector3 spatialPosition { get; set; } ... }要点解读类声明为[Tool]可在编辑器中即时运行这正是“2.5D 编辑器视口”能力的基础SCALE 32定义了 2D/3D 单位换算比例1 个 3D 单位对应 32 个 2D 单位建议取整数以保持像素对齐spatialPosition使用[Export]暴露到编辑器读写时同步其 3D 子节点位置节点同时实现IComparableNode25D为后文YSort25D的深度排序提供接口。坐标换算Basis25D 与 Transform25D配套源码位于插件目录mono/2.5d/addons/node25d-cs/Basis25D.cs定义 2.5D 投影基视角矩阵mono/2.5d/addons/node25d-cs/Transform25D.cs封装包含 3D→2D 变换的完整变换mono/2.5d/addons/node25d-cs/ShadowMath25D.cs计算阴影——一个尝试向下投射的简单 CharacterBodymono/2.5d/addons/node25d-cs/YSort25D.cs对Node25D节点做深度排序保证正确的前后遮挡关系。五种视角模式项目实现了多种视角俯视top down、正面front side、45 度、等距isometric、两种斜轴oblique模式。要实现一个新视角只需新建一个Basis25D在所有Node25D的变换中统一使用它并为该物体创建对应的 2D 精灵即可——这正是 2.5D 方案“3D 只管数学、2D 负责显示”的设计哲学游戏中的 3D 节点CharacterBody、StaticBody仅参与数学运算相机是 2D 的所有精灵也都是 2D 的且可自由替换为任何 3D 节点参与计算。2.5D 编辑器视口是本项目区别于其他 demo 的独有亮点它让 2.5D 关卡编辑不必依赖脑内换算对照学习GDScript 版本位于 misc/2.5d两份项目共享同一套美术资源截图均位于misc/2.5d/screenshots/。另外项目音乐assets/mr_mrs_robot.ogg版权归 Juan Linietskycirca 2008采用 CC-BY 许可。4.5 Multiplayer Pong本地多人联机mono/multiplayer_pong/README.md 是 Pong 的多人联机版本一名玩家按 “host” 建主机另一名玩家按 “join” 加入。文档明确说明该演示只在本地本机工作适合作为 Godot 高等级多人 APIMultiplayerPeer、RPC、Spawn 等在 C# 下的入门范例也是 networking/multiplayer_pong GDScript 版本的直接对照。4.6 Android IAP应用内购买mono/android_iap/README.md 演示如何在 Android 平台用 C# 实现应用内支付其底层对接 Google Play Billing。仓库中提供了完整的封装层源码位于 mono/android_iap/GodotGooglePlayBilling包括GooglePlayBilling.csBilling 服务封装SkuDetails.cs、Purchase.cs、BillingResult.cs商品、购买记录与结果模型入口脚本 Main.cs 演示完整购买流程。需要特别说明的运行限制文档原文强调运行该演示要求先将游戏导出并上传到 Google Play因为真实的内购流程依赖 Google Play 的计费服务与商品配置无法在本地直接联调。该演示对应 GDScript 版本位于 mobile/android_iap。五、C# 与 GDScript 的对照学习路径mono 目录的价值不止于“能用 C# 写出游戏”更在于它为每个项目都提供了对应的 GDScript 版本形成天然的双语对照教材C# 演示对应 GDScript 版本mono/pong2d/pongmono/dodge_the_creeps2d/dodge_the_creepsmono/squash_the_creeps3d/squash_the_creepsmono/2.5dmisc/2.5dmono/multiplayer_pongnetworking/multiplayer_pongmono/android_iapmobile/android_iap对照学习时建议重点关注三点差异类声明GDScript 用extends Area2DC# 用public partial class Ball : Area2D见 mono/pong/Logic/Ball.cs导出参数GDScript 用export注解C# 用[Export]属性见 mono/2.5d/addons/node25d-cs/Node25D.cs 与 mono/dodge_the_creeps/Main.cs方法命名C# 自定义方法用 PascalCase调用引擎方法仍需 snake_case如Node.MethodName.QueueFree。六、如何获取与运行这些演示克隆仓库git clone https://gitcode.com/GitHub_Trending/go/godot-demo-projects或按仓库根 README.md 的说明下载 ZIP 并解压选择正确的编辑器务必下载.NET 版 Godot版本需与各项目project.godot及.csproj中的 SDK 版本匹配当前为Godot.NET.Sdk/4.7.0对应 4.x 分支导入项目在 Godot 项目管理器中点击Scan选择包含所有 demo 的根目录全部项目即会出现在列表中也可单独导入mono/下任意子目录编译运行首次打开 C# 项目时 Godot 会自动还原 NuGet 包并构建解决方案构建完成后即可直接运行。所有演示均以 MIT 许可证分发详见 LICENSE.md各子项目内第三方美术、音频、字体的独立授权信息已在其 README 的 License 小节逐一注明使用前请留意。赞分享示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载相关推荐vLLM-Omni 运行时与阶段执行特性深度解析解耦推理、异步分块、输出物化与前缀缓存vLLM Omni 运行时与阶段执行特性深度解析解耦推理、异步分块、输出物化与前缀缓存 vLLM Omni 通过基于阶段Stage的运行时架构将自回示例工程Paperless 演示幻灯片presentation目录解析基于 reveal.js 的零依赖项目演示与部署Paperless 演示幻灯片presentation目录解析基于 reveal.js 的零依赖项目演示与部署 本篇技术指南围绕 paperless 仓库后端OCR企业应用Godot Mono Decompiler AOT 测试程序基于 NativeAOT 动态链接的 C/C 集成验证指南Godot Mono Decompiler AOT 测试程序基于 NativeAOT 动态链接的 C/C 集成验证指南 本篇指南围绕 gdsdecomp逆向工程开发工具上一篇ToolJet 组件体系详解组件库、属性面板、事件处理器与 Bindings 机制下一篇LeetCode-Go 0173 Binary Search Tree Iterator用 container/heap 最小堆实现 BST 有序迭代器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考