架构阶段,暂时没有项目使用过。
ColaFramework 一款简洁的MVC结构的Unity客户端框架,尤其支持快速开发3D战斗卡牌和mmo类型的游戏。目前已经接入了Tolua,进行Lua层的架构工作。暂时还不支持热更,下一步准备完善这方面的内容,希望有兴趣的可以一起来维护。
马三把近一个月内要开发的任务都放在本项目的敏捷开发面板中了。可以直接按照下面的方式查看看板中的开发计划与进度。
- Unity2018.2.3
- VS2017
- C# & Lua
可以选择以下安装方式集成本框架:
- Clone本项目到本地,与自己的代码融合或者直接在框架基础上进行开发
目前框架根据平台的不同,设计了不同的启动场景,分别命名为:
- GameLauncher(Windows平台)
- GameLauncherAndroid(Android平台)
无论启动场景是哪一个,游戏都由GameLauncher启动器脚本启动。GameLauncher为一个单例类,在游戏初始化的过程中,启动器类负责初始化GameManager、InputMgr、FpsHelper、DebuglogHelper、U3DAutomation、StreamingAssetHelper、多线程工具类等一些基础的操作。
在一些必要的资源准备妥当以后,会执行InitGameCore()方法,该方法会调用GameManager的InitGameCore()方法,进一步地进行初始化一些次要的管理器与资源。
在GameLauncher类中,会主动调用GameManager的Update、LateUpdate、FixedUpdate、ApplicationQuit等类似于MonoBehaivor中的方法,这让您依然可以自由地在这些方法中进行处理自己的相应逻辑。
- CSV&C#版数据节点管理
策划使用Excel表进行数据的配置,然后通过转表工具(位于ColaFrameWork\Tools\XlsxTools\xls2csv目录下,内有详细的使用指南)将Excel表转为csv结构的数据结构供客户端读取。 每一份csv数据表,都应对应一个数据解析类以及一个数据集合类,其中数据解析类用于解析并存储csv中的单条数据(一行),数据集合类将存储多个数据解析类的对象。 数据解析类都应继承自 LocalDataBase (本地数据表中的单条数据的抽象基类):
/// <summary>
/// 本地数据表中的单条数据的抽象基类
/// </summary>
public abstract class LocalDataBase
{
/// <summary>
/// ID
/// </summary>
public int id;
/// <summary>
/// 初始化数据
/// </summary>
/// <param name="strData"></param>
public abstract void InitWithStr(string strData, char splitChar = ',');
/// <summary>
/// 得到Int数据
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
protected int GetInt(string str)
{
if (!string.IsNullOrEmpty(str))
{
return int.Parse(str);
}
return 0;
}
/// <summary>
/// 得到float数据
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
protected float GetFloat(string str)
{
if (!string.IsNullOrEmpty(str))
{
return float.Parse(str);
}
return 0;
}
/// <summary>
/// 得到bool数据
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
protected bool GetBool(string str)
{
if (!string.IsNullOrEmpty(str))
{
return bool.Parse(str);
}
return false;
}
}
LocalDataBase 该抽象类提供了一些基本的数据类型转换方法,id字段用来存储索引id,InitWithStr接口用来解析数据,将数据表中的单行文本传入到该接口以后,通过splitChar标识将数据进行拆分、解析。框架中已经包含了I18NData解析类,编写其他数据解析类时可以参考此类。
数据集合类都应实现 ILocalDataMapBase 接口(DataMap,数据集合的接口,实现该接口用于管理LocalDataBase)
/// <summary>
/// DataMap,数据集合的接口,实现该接口用于管理LocalDataBase
/// </summary>
public interface ILocalDataMapBase
{
/// <summary>
/// 对多行字符串进行处理,保存成LocalDataBase集合
/// </summary>
/// <param name="rows"></param>
void SetMapCsv(string[] rows);
}
ILocalDataMapBase 接口内只有一个 void SetMapCsv(string[] rows) 抽象方法,该方法用来对多行字符串进行处理,保存成LocalDataBase集合。 框架中已经包含了I18NDataMap数据集合类,编写其他数据集合类时可以参考此类。
- LuaConfig&Lua版数据结构管理
同样本框架也支持将Excel表格数据转为lua形式的配置文件,这样便于接入Lua开发以后数据的访问,提高访问效率。
Lua格式的转表工具位于Lua转表工具,其中config配置文件用来配置原始数据的目录和导出的Lua配置文件的目录
如果没有特殊需求的话,无需变更配置文件,直接执行同级目录下的Xls2Lua.exe工具即可进行转表操作。
可以通过 configMgr:GetConfig(name) 方法获取到对应表格的全部配置数据。通过ConfigMgr:GetItem(name,id)可以获取到对应表格的指定id的数据,ConfigMgr在数据加载与读取过程中做了懒加载的缓存策略,在尽可能节省空间的情况下提高数据加载与读取的速度。
框架支持C#版和Lua版两套消息监听与派发机制,用来充当普通的Controller层,用于V和M的解耦等操作。具体的实现原理和用法可以看以下这篇博客:
【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
ColaFrameWork框架在UI开发方面提供了编辑器拓展。通过编辑器可以快速通过模版创建新的UIView类、Module类。也可以新建新的UI模版。TODO:lua文件支持。
- TODO:Lua版本的UI
Module的基类为ModuleBase,游戏内所有的系统的业务逻辑层均继承自该类。框架采用厚Module类型的MVC结构,弱化了C层的作用,强化了M层。游戏中的业务逻辑大部分都放在M层进行处理处理。M层负责处理业务逻辑、监听网络消息、请求网络消息、派发事件通知其他模块或者UI等更新。M层不应该了解View层的存在,不可以直接调用View层,应该通过消息机制通知View做出动作。
ColaFrameWork框架中支持两种种获取组件或者Gameobject等其他实体的方式,分别为传统直接获取式、AutoInject依赖注入式两种,下面详细介绍一下区别与使用:
- 传统直接获取式:函数接口位于CommonHelper通用助手类下面,以下方法均为拓展方法形式,方便调用,具体为:
T GetComponentByName<T>(this GameObject go, string name)
T[] GetComponentsByName<T>(this GameObject go)
GameObject GetGameObjectByName(this GameObject go, string childName)
List<GameObject> GetGameObjectsByName(this GameObject go, string childName)
GameObject FindChildByPath(this GameObject obj, string childPath)
T GetComponentByPath<T>(this GameObject obj, string childPath)
- TODO:Lua端的获取组件的方法
如上图所示,在ColaFramework框架中,规定Excel表格的前四行为固定形式。第一行为说明,解释每一项的意义。第二行为所填数据类型,比如int,string等。第三行为索引字段,表示我们在代码里面如何读取该字段内容。第四行为备用行,可以依据自己的需要进行制定。
除了以上四行以外,其他的行我们就可以填写自己的数据配置了。
ColaFramework框架配置了两款转表工具,分别为xls2csv和xls2lua,顾名思义分别是把Excel表格配置转换为csv和lua形式的数据文件。
xls2csv
本工具支持将xls xlsx 格式的文件转换为csv
需要安装xlrd模块:
- 首先到:https://pypi.python.org/pypi/xlrd 下载xlrd源码包
- 在解压后的源码包内执行 python setup.py install
- 重启命令行即可生效
使用方法: - 打开 config.ini 配置文件,配置输入路径以及输出路径
- 执行 xlsx2csv.py 脚本进行自动导表
教程地址 - 点我点我
Xls2lua
Xls转lua小工具
本工具支持将xls 格式的文件转换为lua,并且配有简单的ConfigMgr读取类
目录结构
- Excel目录存放的是用于测试的文件,表格规定前4行为一些说明与配置信息,不可为空,必填项;
- ConfigMgr目录存放的是一个简单的读取转出的lua文件信息的类;
- LuaData 存放的是转出来的Lua文件;
- Xls2Lua目录包含的是转表工具的源代码;
使用方法
配置bin目录下的config.ini文件,指定Excel输入目录和Lua输出目录,然后执行编译出来的exe文件即可。
教程地址
【游戏开发】Excel表格批量转换成lua的转表工具
资源管理这部分准备用一套成熟的第三方框架代替自研。
待补充
框架中集成了WETEST_SDK,通过使用GAutomator实现Unity手游的UI自动化测试。
TODO:对网易的自动化测试解决方案做一些调研传送门
出于方便定位错误和使结构尽量清晰的目的,ColaFramework框架并没有像其他框架一样对控制台打印进行过度封装。用户依然使用Unity原生自带的Debug.log等函数进行控制台打印,只不过ColaFramework框架对Log输出进行了统一地控制,可以统一地开启或者关闭Log输出。通过宏 BUILD_DEBUG_LOG 可以统一控制Log是否被打印到控制台。同时ColaFramework框架也支持将日志实时地记录到设备本地,方便移动平台进行查错等工作。通过宏 OUTPUT_LOG 可以控制日志是否被记录到设备本地。日志通常被保存在对应平台的可读写路径下的logs目录下的gamelog.txt中。
待补充
ColaFramework框架目前集成了AStar、Recast两种寻路系统。
ColaFramework框架集成了DoTween、iTween两款比较常见的插值动画/缓动动画插件,并且自己拓展封装了适合UGUI的UGUITween组件,可以像NGUI中的Tween一样使用,非常方便,用来解决一些简单的Tween动画效果再合适不过了。
其中拓展UGUITween组件包含以下几个常用的Tween组件:
- UGUITweenScale
- UGUITweenPosition
- UGUITweenAlpha
- UGUITweenRotation