CosmosEngine - Unity3D /2D 轻量级游戏开发框架
CosmosEngine
https://github.com/mr-kelly/CosmosEngine
快速入门
- 1.将NGUI 3.7+版拷到Assets目录下
- 2.在安装Unity的电脑上,打开场景文件: Assets/CosmosEngine/Demo/DemoGame/Bootstrap.unity
- 点击播放,开始一个框架DEMO, 功能包括:打开一个的UI窗(自动匹配脚本)、读取一个Tab表格
简介
CosmosEngine - Unity3D /2D 轻量级模块化游戏开发框架,包含轻量级的代码和常用模块,提供一定的编程范式作约束和工作流程,旨在减少开发人员的重复工作和做决定的次数。
特性
非侵入式设计
一切从CosmosEngine.Create()开始,你甚至可以在现有的项目基础上嵌入。
轻量级
CosmosEngine讨厌厚重的代码类,它十分轻量,使得任何人都可以很轻松的驾驭。
模块化
框架的设计上,一切都是模块化的,框架只是一个包含无数模块的简单容器。
其中,资源管理模块(ResourceModule)和UI模块(UIModule)是底层模块,其余所有你自己的游戏逻辑都通过自定义模块实现。另有一些提供常用模块。(如:常用技能模块、资源更新模块、配置读取模块、多语言模块等可热插拔)
约定优于配置
制定了一些规则和约定,旨在减少软件开发人员需做决定的次数,它们包括:类似Ruby on Rails MVC的UI模块,事件驱动编程准则等。
轻松使用第三方插件
得益于轻量化、模块化的设计,框架是包容一切第三方插件。
比如默认使用UI插件式NGUI,通过内部提供的NGUI桥接类实现与底层UIModule的衔接。
拥抱依赖和耦合
CosmosEngine中假定耦合是不可避免的,对依赖和耦合持开放的态度,使用显式声明来说明模块耦合情况。譬如UI模块,依赖Resource模块,通过[CModuleDependency(xxx)]这个Attribute来说明。
同时CosmosEngine中更多的通过C#的委托/事件机制来减少降低耦合度,譬如说,在快速入门的DEMO中,UI依赖资源,但是GameSettings并不需要依赖资源模块。
约定
作者早年从事Web开发,深深受到“约定优于配置”的影响,认为这是能够让开发人员、游戏策划人员走出无数配置文件陷阱的重要因素。
CosmosEngine中的约定,除去框架内部代码外,是没有强迫性的,如果你不喜欢,是可以拒绝使用,使用你自己的编程范式。
以下是一些使用CosmosEngine开发中建议的约定:
遵循微软官方C#命名规范
紧跟着老大哥的命名规范,同时作者认为“语言命名规范”是一个语言快速入门的利器:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
尽可能的不使用配置文件
CosmosEngine讨厌配置,它倾向于通过命名之间的关系来确定逻辑关系。如一个GameObject叫UIWelcome,那么它使用CUIWelcome Class类进行匹配。
当然,它有一个全局的配置文件(Resources/CEngineConfig.txt),用于配置一些目录定义。
事件驱动编程
开发过程中更多使用C#的事件/委托来实现高内聚低耦合。事件的使用通常有两种方式,有人喜欢做全局事件,把所有事件扔到一个类里。CosmosEngine讨厌这种方式,会令到某一个功能类对全局有依赖。
CosmosEngine的事件定义,只针对地写在特定模块内。
最终目标 - 把某个模块拷到另一个项目可以不作任何修改运行,不重新发明轮子
新项目的开发过程中,最浪费时间的莫过于从头构建底层框架了,既枯燥又重复。更令人恐惧的是不同项目有些功能是一样的,却因部分耦合的问题,导致要重写、维护两套代码,恶心之极。
CosmosEngine中的所有设计,都基于这个开始思考的。
整体结构图

使用经验
异步编程,善用协程和回调
Unity的协程是一个非常好用的特性,它底层的很多异步都通过实现。
而CosmosEngine中回调也比较频繁使用,用来简化一些协程代码,比如UI模块函数CallUI,传入回调函数,等待资源完成加载后执行。
协程的本质是每一个游戏帧进行轮询,而回调的本质就是事件驱动编程。 CosmosEngine里的回调,基本是包裹着协程的。
不使用多线程、多进程,否则在Unity引擎中会有一些不可预料情况。
通过委托/事件大大的降低模块耦合度
CosmosEngine的设计原则是,把一个类拷到另一个项目,可以完整无缺的运行。所有的内置模块,最多会有1~2个的外部依赖,其它都是发送事件,交给外部进行事件绑定处理。
GBK编码问题
尽管在以往项目有一套手机GBK解决方案,但并没有放入CosmosEngine。CosmosEngine中统一使用UTF-8。
Excel保存表是GBK编码
使用Excel表的过程中,会使用GBK进行表的保存。我们在使用CosmosEngine中對Excel表中实行编译机制,既把GBK转成UTF-8,同时又可以对未编译的Excel表进行批注、乱涂乱画。
工作流

CosmosEngine为三个角色(程序、美术、策划)的团队协作提供一个工作流:
- 程序进行代码的编写,修改进行提交
- 美术进行资源设计,修改后进行提交
- 策划以Excel形式进行游戏内容编辑,通过Excel编译器编译成Tab-CSV或其它程序可读内容。(在另一个开源项目KKDaemon中实现)
- Robot——机器人,CosmosEngine可配合另一个开源项目Handyman,进行Web端的定时自动代码编译、资源编译等。(类似的还有QuickBuild等)
乍一看,它没啥特别,事实它着重希望砍掉的一些重复的工作:
- 避免人工化的资源操作,譬如美术希望看到资源在游戏中的效果,提交并呼唤Robot进行资源编译就可以了,不用打扰程序和策划
- 策划可以自由使用成熟的编辑器——Excel进行编辑,可以加注释等让自己工作更轻松
- 程序不用每天被策划问表怎么填和被美术呼唤帮忙试一下了
- 释放多余劳动力,减少人力成本和时间成本————就是帮老板省钱
未来功能
CosmosEngine旨在让一些复杂的事情变得简单。
游戏开发圈子盛行加班;是的,开发一款游戏不容易,但不代表它不能变得更加容易。作者认为,对开发人员来说,糟糕的系统设计和低易用性的功能模块是加班的罪魁祸首。有一些模块功能,它并复杂,可却经常重复。
未来将把这些模块整合进去, 它们基本都是已实现的独立模块:
- 通用技能模块(Skill-Bullet-Buff)
- 资源自动更新模块(CUpdateModule)
- Http模块
- 新的资源依赖处理系统(CDependencyModule)
- 多语言系统(CLocalization)
- 预加载机制(CPreloadModule)
- 声效模块(CAudioModule)
Lua引擎(CScripts)
etc...
CosmosEngine - Unity3D /2D 轻量级游戏开发框架的更多相关文章
- Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源
http://pan.baidu.com/s/1c0xpn4s Unity3d2d手机游戏开发配书资源文件.rar 1.36G 书上的链接坏掉了,我在论坛上面买了一份,放这分享给买了书找不到资源的同学 ...
- Unity3D\2D手机游戏开发 学习
using UnityEngine; using System.Collections; [AddComponentMenu("Game/AutoDestroy")] public ...
- Unity3d Platformer Pro 2D游戏开发框架使用教程
前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...
- IOS 2D游戏开发框架 SpriteKit
最近发现Xcode自带的2D游戏开发框架SpriteKit可以直接引入到APP中进行混合开发,这就是说可以开发出既带业务应用又带游戏的苹果APP,咋怎么觉得这是一个自己的小发现....呵呵....., ...
- 初识phaser框架——开源的HTML5 2D游戏开发框架
背景: 在网上看到,65行实现flappy bird,感到很好奇.原来是使用开源的2D游戏框架 phaser开发的. 什么是phaser2D游戏开发框架呢? 借鉴与网上的资料: 1. Phase ...
- 关于《Unity3D/2D游戏开发从0到1》书籍再版说明
关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...
- 《Unity3D/2D游戏开发从0到1》正式出版发行
<Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息: 书籍的名称: <Uni ...
- 基于 Cocos2d-x-lua 的游戏开发框架 Dorothy 简介
基于 Cocos2d-x-lua 的游戏开发框架 Dorothy 简介 概述 Dorothy 是一个在 Cocos2d-x-lua 基础上发展起来的分支, 它去掉 Cocos2d-x-lua 那些过多 ...
随机推荐
- SpringMVC中为什么要配置Listener和Servlet
一直以来,我们使用SpringMVC的时候习惯性都配置一个ContextLoaderListener,虽然曾经有过疑问,配置的这个监听器和Servlet究竟做了什么,但也没深究. 要说任何Web框架都 ...
- 深度学习应用系列(二) | 如何使用keras进行迁移学习,以训练和识别自己的图片集
本文的keras后台为tensorflow,介绍如何利用预编译的模型进行迁移学习,以训练和识别自己的图片集. 官网 https://keras.io/applications/ 已经介绍了各个基于Im ...
- 洛谷——P1680 奇怪的分组
P1680 奇怪的分组 题目背景 终于解出了dm同学的难题,dm同学同意帮v神联络.可dm同学有个习惯,就是联络同学的时候喜欢分组联络,而且分组的方式也很特别,要求第i组的的人数必须大于他指定的个数c ...
- 简单了解gzip、bzip2、xz
压缩工具gzip.bzip2.xz分别对应压缩格式.gz..bz2..xz.不过tar命令已经可以满足大部分使用,所以这些格式只简单了解一下.gzip压缩速度最快,xz压缩率最高,bz2适中.一般这三 ...
- 03、NavMesh--导航网格寻路
一.概述: NavMesh是3D游戏世界中用于实现动态物体自动寻路的一种技术,他将游戏场景中复杂的结构组织关系简化为带有一定信息的网格, 进而在这些网格的基础上通过一些列的计算来实现自动寻路. 二.简 ...
- Visual Studio警告IDE0006的解决办法
Visual Studio警告IDE0006的解决办法 Visual Studio警告IDE0006虽然给出明确的操作过程,但是在实施的过程中,还是有很多地方需要注意.下面以官方的信息,介绍一下注意 ...
- [Codeforces 1053B] Vasya and Good Sequences
Link: Codeforces 1053B 传送门 Solution: 其实就是暴力 观察需要满足的条件: 1.个数和为偶数 2.最大个数不大于其它所有个数的和 如果只有第一个条件记录前缀和的奇偶性 ...
- 【欧拉函数】BZOJ2818-GCD
怎么漏了这一道……本来想要水一水,结果忘记了φ[1]=1,果然要滚一遍前面的知识…… #include<iostream> #include<cstdio> #include& ...
- bzoj 3540: [Usaco2014 Open]Fair Photography
3540: [Usaco2014 Open]Fair Photography Description FJ's N cows (2 <= N <= 100,000) are standin ...
- Problem E: 矩阵鞍点
AC代码#include<stdio.h> int main() { ][]; ]; int i,j,t,n; while(scanf("%d",&n)!=EO ...