1 Star 2 Fork 1

zum / ET-Platform

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

1. ET-Platform是什么

1.1 先介绍下ET:

ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时支持可靠udp tcp websocket协议,支持服务端3D recast寻路等等

ET源码地址: https://github.com/egametang/ET

1.2 ET-Platform

ET-Platform是对ET的一个整合(修改了部分源码),使之能够更为方便的引用,让框架部分和使用者的代码部分分离更完全,以及更方便ET插件的开发(服务端可以使用nuget包的方式进行引入)

ET-Platform选用ET版本为4.0,master,commitID:e981155(2019-03-13 18:40)

2. 使用说明(开发基于ET-Platform框架的游戏流程)

需要下载的文件:

unitypackage文件

MessageProto工具包

Excel配置示例

2.1 客户端初始化部分:

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"并打勾

或者理解原理后,自行创建对应的场景

2.2 服务端初始化部分:

VS新建三个项目:

.netCore控制台,用于服务端的启动,建议命名"***.Start"

热更层的类库(.netCore2.1+),用于匹配客户端热更部分的服务端,建议命名"***.Hotfix"

Model层的类库(.netCore2.1+),用于匹配客户端非热更部分的服务端,建议命名"***.Model"

  1. 配置三个项目的输出路径都配置在同一个目录下,建议配置"..\..\ServerRelease\"
  2. 控制台项目引用Model层类库,热更层类库引用Model层类库
  3. 三个项目都引用nuget包:ET.Server.Model
  4. 热更层的类库和控制台项目引用nuget包:ET.Server.Hotfix

2.3 开始开发

2.3.1 自定义通讯消息(使用proto生成实体类和操作码定义类)

  1. 下载MessageProto工具包,解压到根目录/MessageProto里并编辑里面的三个proto文件(注意需要修改为自己的前缀,默认为"Demo"):

**InnerMessage.proto,服务器之间内部通讯消息定义放这里

**HotfixMessage.proto,热更模块里服务器和客户端之间的通讯消息放这里

**OuterMessage.proto,非热更模块里服务器和客户端之间的通讯消息放这里

  1. 编辑好之后需要生成cs文件:

Unity菜单栏:Tools->Proto2CS,根据界面上的说明进行配置和生成 ( 注: 一般是需要修改默认的"Demo"目录名 )

或者使用手动生成: 打开MessageProto/BuildProtocToCS.cmd 编辑参数后运行

Hotfix和Outer生成的类建议分别放在"Unity目录/Assets/ET/Model/自己项目目录/"和"Unity目录/Assets/ET/Hotfix/自己项目目录/"下

Inner生成的类建议放在服务端Model项目中

服务端Model添加文件链接的方式,引入Hotfix和Outer的文件

2.3.2 服务端Model层和Hotfix层的初始化入口

[ObjectSystem]
public class ModelInit : AwakeSystem<HotfixComponent> {
    public override void Awake(HotfixComponent self) {
    }
}

[ObjectSystem]
public class HotfixInit : AwakeSystem<HotfixComponent> {
    public override void Awake(HotfixComponent self) {
    }
}

2.3.3 Start项目的入口代码

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);
        }

    }
}

2.3.4 客户端可加入自己的model层和热更层初始化操作

事件:EventIdType.ModelInit和EventIdType.HotfixInit

代码如:

/// <summary>
/// "HotfixInit"为(固定的)热更层初始化事件名
/// </summary>
[Event(EventIdType.HotfixInit)]
public class HotfixInit : AEvent {

2.3.5 生成配置

  1. 编辑数据源

    ET是采用xlsx文件作为配置的数据源,分别生成配置类和配置json数据文件

    "/ConfigBuild/Source/"目录下放配置文件,将使用文件名作为类名,如"2.使用说明"里下载的Excel配置示例

  2. 生成配置文件和类文件

    然后打开Unity的菜单栏: "Tools"->"从Excel生成配置"

  3. 服务端使用

    服务端的配置,如果和客户端一致,那么推荐使用文件链接的形式引用客户端的文件,同时服务端是使用动态程序集加载的热更层,所以只需要选用Hotfix层

    如果服务端配置有和客户端不一致的(如部分字段只能存放于服务端),那么需要单独使用生成的服务端文件

  4. 客户端使用

    客户端生成的配置和类文件会自动放好(配置文件在/Assets/ET/Res/Config/下)

    在Unity的Project面板,打开"Assets/ET/Bundles/Independent/Config.prefab"

    将生成的配置文件引用到"ReferenceCollector"组件里,这样打包时才可以自动将配置文件一起打包进去

2.3.6 定义自己的单位类

继承Unit,可以把位置旋转等信息字段都放在自己的单位类中

2.3.7 客户端热更层Session的使用

// 先创建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的继承

2.4 示例:

本库源码即包含了一个服务端寻路demo

2.5 注意

  1. 登录到进入地图需要调用框架的两个方法,并按照约定通讯必要信息

  2. 打包独立资源的部分,记得需要配置ReferenceCollector组件面板!

3. 部署说明

参考ET

资源Web服务下载

启动配置可以参考例子里的"Start项目/StartConfig/"

4. 开发插件

插件类库里,提供一个初始化方法给外部调用,代码如:

private static bool Inited = false;
/// <summary>
/// 初始化本插件,要在本库中任何一个组件之前调用(不能在事件里调用,推荐在程序入口处调用)
/// </summary>
public static void Init() {
    if (!Inited) {
        ETModel.Game.EventSystem.Add(typeof(BulletHelper).Assembly);
        Inited = true;
    }
}

注意

本框架ILRuntime还未对接完成

MIT License Copyright (c) 2018 tanghai Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

ET的平台化版本,适用于快速使用,以及方便引入第三方ET组件 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/fengssy/ET-Platform.git
git@gitee.com:fengssy/ET-Platform.git
fengssy
ET-Platform
ET-Platform
master

搜索帮助