Building a (Mini) 3D Flutter Game Engine - Part 1
Published on Jul 13, 2024
Nick Fisher 正在开发一个基于 Flutter 的小型 3D 游戏引擎,利用 Filament PBR 渲染库实现跨平台 3D 渲染,并通过 Google 的 Flutter 游戏比赛作为契机,开始了这个项目的实际开发。他首先构建了一个简单的游戏概念,即划船捡垃圾的游戏,并逐步实现了摄像机跟随、碰撞检测和键盘/鼠标控制等基础功能,尽管采取了一些简化的方法来节省时间。
摘要
Nick Fisher 已经在开发 flutter_filament
包一段时间,该包允许在 Flutter 应用中使用 Filament PBR 渲染库进行跨平台 3D 渲染。虽然他还没有发布关于这个包的博客文章,但提供了一个演讲视频和 GitHub 问题链接作为参考。由于对游戏开发的兴趣和 Google 的 Flutter 游戏比赛,他决定扩展 flutter_filament
为一个基础的 3D 游戏引擎。他的初衷是构建一个尽可能简单的引擎,以便在忙碌的工作中找到时间进行开发。最初的游戏概念是划船捡垃圾,旨在通过捡垃圾获得分数,但最终他选择了一个不同的概念,这将在第二部分中讨论。
在技术实现方面,Nick 使用 Flutter 处理 2D UI 叠加,并利用 flutter_filament
进行 3D 对象的渲染和变换、灯光和天空盒子的添加以及动画播放。他还实现了摄像机跟随、碰撞检测和键盘/鼠标控制等功能。为了简化碰撞检测,他在 Blender 中添加了隐形的碰撞体积。在处理用户输入时,他利用 Flutter 的 GestureDetector
小部件,并考虑了将 flutter_filament
重构为更接近传统游戏引擎循环的结构。
观点
- Nick Fisher 正在开发
flutter_filament
包,以便在 Flutter 应用中实现跨平台 3D 渲染。 - 他利用 Google 的 Flutter 游戏比赛作为动力,开始构建一个基础的 3D 游戏引擎。
- 他的目标是开发一个尽可能简单的“迷你”游戏引擎,以便在忙碌的工作中找到时间进行开发。
- 最初的游戏概念是划船捡垃圾,但最终选择了一个不同的概念。
- 他使用 Flutter 处理 2D UI 叠加,并通过
flutter_filament
进行 3D 渲染。 - 为了实现摄像机跟随功能,他采取了在 Blender 中将摄像机作为模型的子节点导出的简化方法。
- 碰撞检测采用了简单的 O(N^2) 复杂度算法,尽管这在实际的游戏引擎中是不可取的。
- 他通过在 Blender 中添加隐形的碰撞体积来解决碰撞检测的问题。
- 对于键盘/鼠标控制,他利用 Flutter 的
GestureDetector
小部件,并考虑了将flutter_filament
重构为更接近传统游戏引擎循环的结构。
《Maeiee成长感悟》- 从北漂到准父亲的生活洞察
生活在快速节奏的都市,作为程序员和即将迎来人生新角色的我,经历了无数难忘的瞬间和深刻的思考。这些体验和感悟,我渴望与你分享。
《Maeiee成长感悟》是一个收集我所有重要生活事件和心得的地方。每一篇文章都是对过去经历的反思和对未来生活的展望,真实记录作为一个程序员、副业探索者、终身学习者、一个准爸爸和一个北漂的多重身份之间的平衡与挑战。
这里没有华丽的辞藻,只有最真实的思考和感受,希望它们能触动你的心弦,也许能在你的生活旅程中提供一些启示和慰藉。