做游戏开发,很多人第一反应是 Unity 或 Godot 这类大而全的编辑器。但如果你是个习惯用代码掌控一切的 .NET 开发者,打开那些编辑器时,心里难免犯嘀咕:我的游戏逻辑、我的架构、我的代码风格,都得迁就这个工具。Gondwana 这个开源项目给出了另一种答案——一个 code-first(代码优先,即一切以代码为核心,编辑器只是可选辅助)的 C#/.NET 游戏引擎,让你用纯 C# 写游戏,编辑器不拥有你的项目,你随时可以扔掉它。
Gondwana 面向 .NET 8,支持 2D 和 2.5D 游戏,渲染基于 SkiaSharp(一个跨平台的 2D 图形库,底层是 Google 的 Skia 引擎),能跑在 Windows、Linux、macOS 和 WebAssembly 上。它最核心的设计哲学是:游戏行为就是普通 C# 代码,引擎提供细粒度的控制——渲染、时序、移动、输入、碰撞检测、场景组合、游戏架构,全都暴露给你,而不是藏在一个黑盒编辑器后面。
为什么这很重要?传统游戏引擎的编辑器往往和运行时深度绑定,你做的场景、动画、资源,都变成编辑器专属的工程文件,离开那个工具就寸步难行。Gondwana 反其道而行:它定义了一套持久化的内容格式(GAF 资源包、GTS 瓦片集、GANI 动画、GSND 声音、GSCN 场景、GSPR 精灵),这些格式是引擎的一部分,而不是 Studio 的私有项目文件。你可以在运行时直接加载它们,也可以在 C# 里用代码构造等价的对象。编辑器(Gondwana Studio)只是这些格式的一个可视化编辑工具,它不拥有你的应用,也不拥有你的运行时架构。
这种设计带来的直接好处是:你可以完全用代码搭建游戏,也可以先用 Studio 可视化地摆好场景和动画,再在代码里加载;两种工作流可以独立使用,也可以混用。而且因为格式是开放的,你甚至可以用 ChatGPT 或 Codex 这类 AI 工具来辅助开发——项目官方提供了一个插件,让 AI 能基于当前源码、测试和文档回答引擎相关问题,或者直接帮你写实现代码。
架构上,Gondwana 的思路很清晰:一个中央 Engine 循环驱动时序、输入、移动、动画和游戏状态;View(视图)和 Camera(摄像机)负责把 SceneLayer(场景层)的内容投影到平台的 backbuffer(后备缓冲,即最终要显示到屏幕上的像素缓冲区)上;WinForms、Avalonia、Blazor 这些平台适配器只负责最外层的呈现和原生输入,核心引擎保持平台无关。这种"适配器在边缘"的设计,让引擎本身非常干净,也方便扩展到新平台。
渲染方面,Gondwana 支持 CPU 位图和 GPU 两种路径。桌面端用 OpenGL,Blazor/WebAssembly 有专门的 WebGL 路径。特别值得一提的是 dirty-region(脏区域)渲染:CPU 位图模式下,引擎可以只重绘世界空间中发生变化的那块区域,而不是每帧重画整个画面,这在场景大部分静止时能省下不少性能。
场景系统是 view-centric(以视图为中心)的:场景里包含多个独立渲染的 SceneLayer,视图支持多个摄像机和视口,可以做视差滚动(不同层移动速度不同,营造深度感)、稳定的 z 排序(控制绘制顺序)、粒子效果、多种网格投影(正交、菱形等距、轴向等距、六边形等),还有模块化的光照和战争迷雾(fog-of-war,即地图上未探索区域被遮挡的效果)原语。
碰撞检测也做得比较细:支持逐帧和逐瓦片(per-tile,即按地图格子)的碰撞调整,能处理更精确的碰撞几何。输入方面统一了键盘、鼠标、触摸和游戏手柄,SDL2 手柄支持作为独立包提供。音频支持 Windows 的 NAudio 后端和浏览器的 HTML5 Audio,MIDI 播放也有专门包。视频播放通过 LibVLCSharp 实现,还能做成可交互拖动的 VideoWidget。
Gondwana 的模块化做得很彻底。核心包 Gondwana 是必需的,但 Hosting(生命周期管理)、Widgets(游戏 UI 组件)、各个平台适配器、音频、视频、输入,全是独立 NuGet 包,按需安装。CLI 工具(gondwana)能帮你创建项目、检查环境、升级包、管理资源、发布到桌面或 WebAssembly,甚至一条命令部署到 itch.io 或静态 Web 主机。
最让我意外的是它对 AI 辅助开发的认真态度。官方维护了一个 MCP(Model Context Protocol,一种让 AI 工具访问外部数据的标准协议)服务,给 ChatGPT 和 Codex 提供引擎的实时源码、测试和文档。这意味着 AI 给你的答案是基于当前版本的真实 API,而不是训练数据里可能过时的知识。
当然,它也有明显的取舍。Gondwana 不是那种开箱即用的全家桶——没有可视化脚本编辑器,没有拖拽式的 UI 设计器,物理系统还在扩展中(目前重点是 2D 物理,动量、弹性、更多碰撞形状在路线图上)。Studio 和独立编辑器目前只支持 Windows(因为基于 WinForms),但游戏本身可以跨平台。如果你想要的是"打开编辑器就能拖出个游戏"的体验,它不适合你;但如果你想要的是"用 C# 精确控制每一帧、每一像素,编辑器只是可选的辅助",它正中下怀。
这个思路能直接用在哪?如果你在做 .NET 生态的 2D 工具、可视化应用、或者想给桌面应用加游戏化交互,Gondwana 的渲染、场景、输入、UI 组件都能独立取用。它的"内容格式与编辑器解耦"设计也值得借鉴——当你在做需要可视化编辑的工具时,把数据格式设计成开放、可代码构造的,而不是绑定在编辑器上,会让你的用户更自由。项目采用 MIT 协议,代码在 GitHub 上,想研究一个现代 .NET 游戏引擎怎么组织渲染管线、场景系统和平台适配,它是个不错的参考样本。
内容与图片版权归原作者所有 · 原文: https://github.com/Isthimius/Gondwana