ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时支持可靠udp tcp websocket协议,支持服务端3D recast寻路等等
ET源码地址: https://github.com/egametang/ET
ET-Platform是对ET的一个整合(修改了部分源码),使之能够更为方便的引用,让框架部分和使用者的代码部分分离更完全,以及更方便ET插件的开发(服务端可以使用nuget包的方式进行引入)
ET-Platform选用ET版本为4.0,master,commitID:e981155(2019-03-13 18:40)
需要下载的文件:
Unity 新建项目,导入unitypackage文件
打开Unity的C#项目 (菜单: Assets->Open C# Project)
分别在"Unity.Model项目/Assets/ET/Model/"和"Unity.Hotfix项目/Assets/ET/Hotfix/"下新增一个目录,用于存放开发者自己的代码,该新增的目录下,目录结构规范参考同级目录"ET"下的目录结构
打开"Edit Layers...",设置
"User Layer 8"=Map
"User Layer 9"=Hidden
File->Build Settings... 将两个ET场景"ET/Scenes/Init"和"ET/Scenes/Map"加入到"Scenes In Build"并打勾
或者理解原理后,自行创建对应的场景
VS新建三个项目:
.netCore控制台,用于服务端的启动,建议命名"***.Start"
热更层的类库(.netCore2.1+),用于匹配客户端热更部分的服务端,建议命名"***.Hotfix"
Model层的类库(.netCore2.1+),用于匹配客户端非热更部分的服务端,建议命名"***.Model"
**InnerMessage.proto,服务器之间内部通讯消息定义放这里
**HotfixMessage.proto,热更模块里服务器和客户端之间的通讯消息放这里
**OuterMessage.proto,非热更模块里服务器和客户端之间的通讯消息放这里
Unity菜单栏:Tools->Proto2CS,根据界面上的说明进行配置和生成 ( 注: 一般是需要修改默认的"Demo"目录名 )
或者使用手动生成: 打开MessageProto/BuildProtocToCS.cmd 编辑参数后运行
Hotfix和Outer生成的类建议分别放在"Unity目录/Assets/ET/Model/自己项目目录/"和"Unity目录/Assets/ET/Hotfix/自己项目目录/"下
Inner生成的类建议放在服务端Model项目中
服务端Model添加文件链接的方式,引入Hotfix和Outer的文件
[ObjectSystem]
public class ModelInit : AwakeSystem<HotfixComponent> {
public override void Awake(HotfixComponent self) {
}
}
[ObjectSystem]
public class HotfixInit : AwakeSystem<HotfixComponent> {
public override void Awake(HotfixComponent self) {
}
}
class Program {
private static string UserHotfixDllFilePath = "./LiveH5Games.Server.Hotfix.dll";
private static string UserHotfixPdbFilePath = "./LiveH5Games.Server.Hotfix.pdb";
private static void Main(string[] args) {
//控制台调用例子
try {
//初始化服务管理器
ServerManager.Init(UserHotfixDllFilePath, UserHotfixPdbFilePath);
//加载配置
Options options = Game.Scene.AddComponent<OptionComponent, string[]>(args).Options;
StartConfig startConfig = Game.Scene.AddComponent<StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;
if (!options.AppType.Is(startConfig.AppType)) {
Log.Error("命令行参数apptype与配置不一致");
return;
}
switch (startConfig.AppType) {
case AppType.AllServer:
// allserver一般为调试,需要控制台输出等交互
Game.Scene.AddComponent<ConsoleComponent>();
break;
}
//初始化服务管理器
AutoResetEvent loopEndEvent = new AutoResetEvent(false);
//开始当前配置的服务消息循环
ServerManager.StartServerLoopByConfig<NetOuterComponent>(typeof(ModelInit).Assembly, startConfig, loopEndEvent);
} catch (Exception e) {
Log.Error(e);
}
}
}
事件:EventIdType.ModelInit和EventIdType.HotfixInit
代码如:
/// <summary>
/// "HotfixInit"为(固定的)热更层初始化事件名
/// </summary>
[Event(EventIdType.HotfixInit)]
public class HotfixInit : AEvent {
编辑数据源
ET是采用xlsx文件作为配置的数据源,分别生成配置类和配置json数据文件
"/ConfigBuild/Source/"目录下放配置文件,将使用文件名作为类名,如"2.使用说明"里下载的Excel配置示例
生成配置文件和类文件
然后打开Unity的菜单栏: "Tools"->"从Excel生成配置"
服务端使用
服务端的配置,如果和客户端一致,那么推荐使用文件链接的形式引用客户端的文件,同时服务端是使用动态程序集加载的热更层,所以只需要选用Hotfix层
如果服务端配置有和客户端不一致的(如部分字段只能存放于服务端),那么需要单独使用生成的服务端文件
客户端使用
客户端生成的配置和类文件会自动放好(配置文件在/Assets/ET/Res/Config/下)
在Unity的Project面板,打开"Assets/ET/Bundles/Independent/Config.prefab"
将生成的配置文件引用到"ReferenceCollector"组件里,这样打包时才可以自动将配置文件一起打包进去
继承Unit,可以把位置旋转等信息字段都放在自己的单位类中
// 先创建Model层的session以及组件
// (Model层使用Model层的session来收发消息)
ETModel.Session gateSession = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create("***:**");
ETModel.Game.Scene.AddComponent<ETModel.SessionComponent>().Session = gateSession;
// 再用Model层的session创建ETHotfix层的Session,以及组件
// (热更层使用热更层的session来收发消息)
Game.Scene.AddComponent<SessionComponent>().Session = ComponentFactory.Create<Session, ETModel.Session>(gateSession);
//区分开来的目的是为了避开IRuntime的继承
本库源码即包含了一个服务端寻路demo
登录到进入地图需要调用框架的两个方法,并按照约定通讯必要信息
打包独立资源的部分,记得需要配置ReferenceCollector组件面板!
启动配置可以参考例子里的"Start项目/StartConfig/"
插件类库里,提供一个初始化方法给外部调用,代码如:
private static bool Inited = false;
/// <summary>
/// 初始化本插件,要在本库中任何一个组件之前调用(不能在事件里调用,推荐在程序入口处调用)
/// </summary>
public static void Init() {
if (!Inited) {
ETModel.Game.EventSystem.Add(typeof(BulletHelper).Assembly);
Inited = true;
}
}
本框架ILRuntime还未对接完成
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。