「游戏引擎Mojoc」(1)简介

Mojoc 是一个开源(MIT License),跨平台,使用C语言编写的游戏引擎。基于OpenGLES3的渲染和C99的语法写成。目前,可以跨平台工作在Android和IOS上,也很容易扩展到其它平台。GitHub地址:scottcgi/Mojoc

核心理念

保持简单,追求简单,简单充满了力量。而简单的背后,是更多的思考,实践与重构。

主要特性

  • 所有的代码实现,只是用了C语言和C99的语法特性。
  • 在平台独立的代码中,只使用了C语言的标准库,其它的功能手动实现。
  • 使用了具有独特风格的C语言代码书写格式,Code Style
  • 使用了非常简单,轻量级的,OOC面向对象抽象模型,OOC Model
  • 基于一种组件,状态机,消息驱动,三合一的游戏逻辑架构,Component Architecture
  • 更多的代码特性可以参看这里,Code Details

后续的文章里,会介绍代码风格,编程模型的细节。包括设计的考虑和演变过程,以及使用时候的感受。

架构概况

简单说明

为什么使用C语言而不是C++ ?
  • 已经有大量的C++游戏引擎,已经是重复造轮子了,不如选有点不同的方式。如果是要用C++写游戏引擎,编写动力可能就没有那么大了。就是觉得C写游戏引擎有意思。

  • 游戏引擎是个复杂的东西,如何做到简单与简洁 ?C语言就是一个古老而简洁的语言,本身复杂不起来,所有的复杂是来自于人脑。所以使用C言语,仅仅需要面对的就是降低人脑的复杂,这是有趣的部分和过程。

  • 曾经,我对C语言编写复杂的项目,积累了一些特别的想法和感觉。很想找个机会验证这些想法。

  • 受到 “Doom启示录” 的影响,卡马克最开始的引擎全是C语言写的。想体验一下,在湖边的小木屋,外面电闪雷鸣,风雨交加,湖水上涨,而我在黑屋子里,用C语言疯狂编译迭代的感觉。

Mojoc名字的由来 ?
Mojoc = Mojo + C (C语言)

Mojoc的Logo和意义 ?

M:   耳朵
OO:  眼睛
J:   身体
C:   尾巴

Mojoc的编写过程

这个引擎开始于2012年,主要是业余时间开发的。一开始就没有打算写着玩玩,如果这样动力也没有那么大,初衷就是想要写一个真正能支撑开发游戏的引擎,然后用这个引擎开发自己的游戏发布。

一直的定位就是手机平台,复杂的我也做不来,时间精力经验有限。开始使用,Eclipse + CDT + ADT + NDK 专注于Android平台。蹩脚的编辑器,蹩脚的工具链,蹩脚的代码提示,蹩脚的编译过程,但凑合着就是能用。

开发的过程,充满了纠结与反反复复。主要是设想与实践的碰撞,产生不断重构的过程,期间感受指引着思路,慢慢变的清晰。 说起来寥寥几句,但实际上是很艰难的,因为很多问题并没有对与错,只有选择与取舍,时间会让结构崩塌,然后在废墟之上,显现一条从未想到过的路。路与路之间不断的交叠,覆盖与串联,真的很难保持简洁与简单,仿佛宇宙中充满一种无形的力,在促成无序与混乱。效率,性能与结构的清晰,代码的可阅读性,都在互相拉扯。而所有的一切选择,都是构建在,大脑虚幻的确定感与自以为是之上。哪一天,一个公式,一个测试,一本书,一篇文章,一个新观点,新想法,新知识,就推翻了一切。墙倒了,楼没了,搬砖的重构又开始了。

好在最后的最后,基本完成了最初的设想,有时候我会觉得,生活和人生都被这个引擎给卡主了。如果不能完成,并在此之上构建一个游戏,我的人生就完了,付出了很多的努力和时间,无论如何都需要给自己一个交代,不是别的,而是一个简单的句号。

长篇大论我可以写的比代码多,总之收获是很多的,不仅仅是编程方面的收获,最重要的是看清了自己,看到了人脑虚幻的确定感,事物在细节上构建的不确定性与随机的自由组合,时间是如何用互相矛盾的东西在纠结中创造发展事物的。在结合,黑天鹅,信息简史,思考的快与慢等几本书,还有人类简史与未来简史,让我对编程工作也有了新的理解。以后会把感受和收获总结出来,写成文章,放到这个专栏里,闪念与乱想

Mojoc能开发什么样的游戏

事实上,这只是引擎第一个版本。有很多很多需要改进和增加的功能。目前,勉强可以做一些简单的2D小游戏,能跨IOS和Android两个平台,编辑器使用了一些第三方现成的,比如spine骨骼动画(我用引擎自己实现了它的运行时)。

重要的是,引擎的结构,C语言的编程模型和代码风格,这些都是确定的,在实践中不断调整修改而来的。未来的扩展,也是在这个固定的架构之下完成的。比如,添加第三方库的规范和目录结构,实现第三方工具的数据读取和运行时,切换渲染API的实现,增加游戏逻辑功能的组件,添加3D功能,增加跨平台的数量,或是实现自己的编辑器等等。

引擎结构简单清晰,模块化,层层递进,每一层都可以自由扩展。给出了C语言的统一编写规范和抽象模型,可以保证C语言的表达是简洁明了,没有黑魔法的。只需要C99的知识就可以掌握和理解Mojoc,哪怕随着引擎不断的扩展复杂化,也不会改变这一点。

所以,我觉得引擎实现的可用功能,是简单甚至是简陋的,只保持了最基本的可用性。但有大量的内涵和细节是值得了解的。比如,我就实现了一个C语言标准库之上的一个工具箱,包括数学库,基本数据结构,Json解析器,Tween动画的完整实现,协程,简单的物理碰撞等等。比如跨平台的声音解决方案,跨平台的文件操作方案,很多扩展的工作都只是在同样的模式下,进行重复而已。更多细节的可以参看,Code Details

完成的游戏

其实我都不太好意思说,因为这个游戏,实在是简陋并且难度还非常的变态。其本身就是为了引擎而制作的,把引擎的API都调用一遍,能跑起来玩起来算是一种测试了。同时,我把这个游戏源代码进行了一些剪裁,放在了Sample里面,可以切实看到Mojoc是如何运行的。下载地址如下:

开发路线图

这部分就不展开了,计划原本是十分宏伟和充满野心的,但现实总在做一种平均值的回归,无论是个人能力,还是人生的曲折,还是生命的长度,亦或是DNA的蓝图。计划在这里Mojoc Roadmap,有时间就慢慢去实现了,没时间就在等一等。

写作计划

现在的工作重心已经转移到unity上来。unity 积累了一个开箱即用的中间层,里面有很多各种插件,包括这个快速开发的中间层本身,都准备发布到unity asset store里面。用unity可以更快的开发游戏,实现游戏设计,做出有可玩性的游戏才是第一步。
我会在这个专栏,逐步的把Mojoc的功能实现和思路展开,算是一种记录和总结。同样也会把使用unity过程的最佳实践总结记录出来。

unity的插件应该是付费的,但购买即可获得源代码。比如,比DOTween性能更好的tween插件,强大好用的UI组件,超快的Json解析器,gameplay的逻辑抽象层,还有各种实用的小组件,等等。

unity和Mojoc是一个互相影响的过程,我会把Mojoc开发中的经验用到unity里面,也会把unity使用中的改进反馈到Mojoc之中。


「Mojoc是一个理想」

猜你喜欢

转载自blog.csdn.net/tom_221x/article/details/78316077