# ColaFrameWork
**Repository Path**: a2246727686/ColaFrameWork
## Basic Information
- **Project Name**: ColaFrameWork
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-11
- **Last Updated**: 2026-02-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ColaFrameWork
### ColaFrameWork 自研Unity客户端框架
架构阶段,暂时没有项目使用过。
### 框架简介
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表进行数据的配置,然后通过[转表工具](https://github.com/XINCGer/Unity3DTraining/tree/master/XlsxTools/xls2csv)(位于ColaFrameWork\Tools\XlsxTools\xls2csv目录下,内有详细的使用指南)将Excel表转为csv结构的数据结构供客户端读取。
每一份csv数据表,都应对应一个数据解析类以及一个数据集合类,其中数据解析类用于解析并存储csv中的单条数据(一行),数据集合类将存储多个数据解析类的对象。
数据解析类都应继承自 **LocalDataBase** (本地数据表中的单条数据的抽象基类):
```C#
///
/// 本地数据表中的单条数据的抽象基类
///
public abstract class LocalDataBase
{
///
/// ID
///
public int id;
///
/// 初始化数据
///
///
public abstract void InitWithStr(string strData, char splitChar = ',');
///
/// 得到Int数据
///
///
///
protected int GetInt(string str)
{
if (!string.IsNullOrEmpty(str))
{
return int.Parse(str);
}
return 0;
}
///
/// 得到float数据
///
///
///
protected float GetFloat(string str)
{
if (!string.IsNullOrEmpty(str))
{
return float.Parse(str);
}
return 0;
}
///
/// 得到bool数据
///
///
///
protected bool GetBool(string str)
{
if (!string.IsNullOrEmpty(str))
{
return bool.Parse(str);
}
return false;
}
}
```
**LocalDataBase** 该抽象类提供了一些基本的数据类型转换方法,id字段用来存储索引id,InitWithStr接口用来解析数据,将数据表中的单行文本传入到该接口以后,通过splitChar标识将数据进行拆分、解析。框架中已经包含了**I18NData**解析类,编写其他数据解析类时可以参考此类。
数据集合类都应实现 **ILocalDataMapBase** 接口(DataMap,数据集合的接口,实现该接口用于管理LocalDataBase)
```C#
///
/// DataMap,数据集合的接口,实现该接口用于管理LocalDataBase
///
public interface ILocalDataMapBase
{
///
/// 对多行字符串进行处理,保存成LocalDataBase集合
///
///
void SetMapCsv(string[] rows);
}
```
**ILocalDataMapBase** 接口内只有一个 **void SetMapCsv(string[] rows)** 抽象方法,该方法用来对多行字符串进行处理,保存成LocalDataBase集合。
框架中已经包含了**I18NDataMap**数据集合类,编写其他数据集合类时可以参考此类。
* LuaConfig&Lua版数据结构管理
同样本框架也支持将Excel表格数据转为lua形式的配置文件,这样便于接入Lua开发以后数据的访问,提高访问效率。
Lua格式的转表工具位于[Lua转表工具](./Tools/XlsxTools/xls2lua),其中config配置文件用来配置原始数据的目录和导出的Lua配置文件的目录
如果没有特殊需求的话,无需变更配置文件,直接执行同级目录下的Xls2Lua.exe工具即可进行转表操作。
可以通过 configMgr:GetConfig(name) 方法获取到对应表格的全部配置数据。通过ConfigMgr:GetItem(name,id)可以获取到对应表格的指定id的数据,ConfigMgr在数据加载与读取过程中做了懒加载的缓存策略,在尽可能节省空间的情况下提高数据加载与读取的速度。
#### 事件/消息处理中心(Controller层)
框架支持C#版和Lua版两套消息监听与派发机制,用来充当普通的Controller层,用于V和M的解耦等操作。具体的实现原理和用法可以看以下这篇博客:
[【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher](https://www.cnblogs.com/msxh/p/9539231.html)
#### UI框架(View层)
* UI工作流程

* UI主要方法

#### 在ColaFramework框架中通过编辑器提高UI开发效率
ColaFrameWork框架在UI开发方面提供了编辑器拓展。通过编辑器可以快速通过模版创建新的UIView类、Module类。也可以新建新的UI模版。TODO:lua文件支持。


* TODO:Lua版本的UI
#### SubSys系统框架(Module层)
Module的基类为ModuleBase,游戏内所有的系统的业务逻辑层均继承自该类。框架采用厚Module类型的MVC结构,弱化了C层的作用,强化了M层。游戏中的业务逻辑大部分都放在M层进行处理处理。M层负责处理业务逻辑、监听网络消息、请求网络消息、派发事件通知其他模块或者UI等更新。M层不应该了解View层的存在,不可以直接调用View层,应该通过消息机制通知View做出动作。
#### 组件与实体获取
ColaFrameWork框架中支持两种种获取组件或者Gameobject等其他实体的方式,分别为传统直接获取式、AutoInject依赖注入式两种,下面详细介绍一下区别与使用:
>* 传统直接获取式:函数接口位于CommonHelper通用助手类下面,以下方法均为拓展方法形式,方便调用,具体为:
```C#
T GetComponentByName(this GameObject go, string name)
T[] GetComponentsByName(this GameObject go)
GameObject GetGameObjectByName(this GameObject go, string childName)
List GetGameObjectsByName(this GameObject go, string childName)
GameObject FindChildByPath(this GameObject obj, string childPath)
T GetComponentByPath(this GameObject obj, string childPath)
```
>* AutoInject依赖注入式:通过给需要注入的字段或者属性打上AutoInjectAttribute标签,然后再调用AutoInject.Inject(Panel, this);方法,底层会在内部通过反射
机制完成对应字段或属性的注入,然后直接即可像正常的Component或者Gameobject等实体来使用了。具体使用方法如下所示:
 
#### Execl策划表格规范与转表

如上图所示,在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 脚本进行自动导表
教程地址
* [点我点我](http://www.cnblogs.com/msxh/p/7858346.html)
---
**Xls2lua**
Xls转lua小工具
本工具支持将xls 格式的文件转换为lua,并且配有简单的ConfigMgr读取类
目录结构
* Excel目录存放的是用于测试的文件,表格规定前4行为一些说明与配置信息,不可为空,必填项;
* ConfigMgr目录存放的是一个简单的读取转出的lua文件信息的类;
* LuaData 存放的是转出来的Lua文件;
* Xls2Lua目录包含的是转表工具的源代码;
使用方法
配置bin目录下的config.ini文件,指定Excel输入目录和Lua输出目录,然后执行编译出来的exe文件即可。
教程地址
[【游戏开发】Excel表格批量转换成lua的转表工具](https://www.cnblogs.com/msxh/p/8539108.html)
#### 资源管理
资源管理这部分准备用一套成熟的第三方框架代替自研。
#### 编辑器拓展与工具
待补充
#### 游戏自动化测试
框架中集成了WETEST_SDK,通过使用[GAutomator](https://github.com/Tencent/GAutomator)实现Unity手游的UI自动化测试。
TODO:对网易的自动化测试解决方案做一些调研[传送门](http://airtest.netease.com/index.html)
#### DebugLog与日志
出于方便定位错误和使结构尽量清晰的目的,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