精华内容
下载资源
问答
  • et框架
    千次阅读
    2020-06-28 09:32:00

    ET的介绍:

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

    ET的功能:

    1.可用VS单步调试的分布式服务端,N变1

    一般来说,分布式服务端要启动很多进程,一旦进程多了,单步调试就变得非常困难,导致服务端开发基本上靠打log来查找问题。平常开发游戏逻辑也得开启一大堆进程,不仅启动慢,而且查找问题及其不方便,要在一堆堆日志里面查问题,这感觉非常糟糕,这么多年也没人解决这个问题。ET框架使用了类似守望先锋的组件设计,所有服务端内容都拆成了一个个组件,启动时根据服务器类型挂载自己所需要的组件。这有点类似电脑,电脑都模块化的拆成了内存,CPU,主板等等零件,搭配不同的零件就能组装成一台不同的电脑,例如家用台式机需要内存,CPU,主板,显卡,显示器,硬盘。而公司用的服务器却不需要显示器和显卡,网吧的电脑可能不需要硬盘等。正因为这样的设计,ET框架可以将所有的服务器组件都挂在一个服务器进程上,那么这个服务器进程就有了所有服务器的功能,一个进程就可以作为整组分布式服务器使用。这也类似电脑,台式机有所有的电脑组件,那它也完全可以当作公司服务器使用,也可以当作网吧电脑。

    2.随意可拆分功能的分布式服务端,1变N

    分布式服务端要开发多种类型的服务器进程,比如Login server,gate server,battle server,chat server friend server等等一大堆各种server,传统开发方式需要预先知道当前的功能要放在哪个服务器上,当功能越来越多的时候,比如聊天功能之前在一个中心服务器上,之后需要拆出来单独做成一个服务器,这时会牵扯到大量迁移代码的工作,烦不胜烦。ET框架在平常开发的时候根本不太需要关心当前开发的这个功能会放在什么server上,只用一个进程进行开发,功能开发成组件的形式。发布的时候使用一份多进程的配置即可发布成多进程的形式,是不是很方便呢?随便你怎么拆分服务器。只需要修改极少的代码就可以进行拆分。不同的server挂上不同的组件就行了嘛!

    3.跨平台的分布式服务端

    ET框架使用C#做服务端,现在C#是完全可以跨平台的,在linux上安装.netcore,即可,不需要修改任何代码,就能跑起来。性能方面,现在.netcore的性能非常强,比lua,python,js什么快的多了。做游戏服务端完全不在话下。平常我们开发的时候用VS在windows上开发调试,发布的时候发布到linux上即可。ET框架还提供了一键同步工具,打开unity->tools->rsync同步,即可同步代码到linux上

    ./Run.sh Config/StartConfig/192.168.12.188.txt 
    

    即可编译启动服务器。

    4.提供协程支持

    C#天生支持异步变同步语法 async和await,比lua,python的协程强大的多,新版python以及javascript语言甚至照搬了C#的协程语法。分布式服务端大量服务器之间的远程调用,没有异步语法的支持,开发将非常麻烦。所以java没有异步语法,做单服还行,不适合做大型分布式游戏服务端。例如:

    // 发送C2R_Ping并且等待响应消息R2C_Ping
    R2C_Ping pong = await session.Call(new C2R_Ping()) as R2C_Ping;
    Log.Debug("收到R2C_Ping");
    
    // 向mongodb查询一个id为1的Player,并且等待返回
    Player player = await Game.Scene.GetComponent<DBProxyComponent>().Query<Player>(1);
    Log.Debug($"打印player name: {player.Name}")
    

    可以看出,有了async await,所有的服务器间的异步操作将变得非常连贯,不用再拆成多段逻辑。大大简化了分布式服务器开发

    5.提供类似erlang的actor消息机制

    erlang语言一大优势就是位置透明的消息机制,用户完全不用关心对象在哪个进程,拿到id就可以对对象发送消息。ET框架也提供了actor消息机制,实体对象只需要挂上MailBoxComponent组件,这个实体对象就成了一个Actor,任何服务器只需要知道这个实体对象的id就可以向其发送消息,完全不用关心这个实体对象在哪个server,在哪台物理机器上。其实现原理也很简单,ET框架提供了一个位置服务器,所有挂载MailBoxComponent的实体对象都会将自己的id跟位置注册到这个位置服务器,其它服务器向这个实体对象发送消息的时候如果不知道这个实体对象的位置,会先去位置服务器查询,查询到位置再进行发送。

    6.提供服务器不停服动态更新逻辑功能

    热更是游戏服务器不可缺少的功能,ET框架使用的组件设计,可以做成守望先锋的设计,组件只有成员,无方法,将所有方法做成扩展方法放到热更dll中,运行时重新加载dll即可热更所有逻辑。

    7.客户端使用C#热更新,热更新一键切换

    因为ios的限制,之前unity热更新一般使用lua,导致unity3d开发人员要写两种代码,麻烦的要死。之后幸好出了ILRuntime库,利用ILRuntime库,unity3d可以利用C#语言加载热更新dll进行热更新。ILRuntime一个缺陷就是开发时候不支持VS debug,这有点不爽。ET框架使用了一个预编译指令ILRuntime,可以无缝切换。平常开发的时候不使用ILRuntime,而是使用Assembly.Load加载热更新动态库,这样可以方便用VS单步调试。在发布的时候,定义预编译指令ILRuntime就可以无缝切换成使用ILRuntime加载热更新动态库。这样开发起来及其方便,再也不用使用狗屎lua了

    8.客户端全热更新

    客户端可以实现所有逻辑热更新,包括协议,config,ui等等

    9.客户端服务端用同一种语言,并且共享代码

    下载ET框架,打开服务端工程,可以看到服务端引用了客户端很多代码,通过引用客户端代码的方式实现了双端共享代码。例如客户端服务端之间的网络消息两边完全共用一个文件即可,添加一个消息只需要修改一遍。

    10.KCP ENET TCP Websocket协议无缝切换

    ET框架不但支持TCP,而且支持可靠的UDP协议(ENET跟KCP),ENet是英雄联盟所使用的网络库,其特点是快速,并且网络丢包的情况下性能也非常好,这个我们做过测试TCP在丢包5%的情况下,moba游戏就卡的不行了,但是使用ENet,丢包20%仍然不会感到卡。非常强大。框架还支持使用KCP协议,KCP也是可靠UDP协议,据说比ENET性能更好,使用kcp请注意,需要自己加心跳机制,否则20秒没收到包,服务端将断开连接。协议可以无缝切换。

    11. 3D Recast寻路功能

    可以Unity导出场景数据,给服务端做recast寻路。做MMO非常方便,demo演示了服务端3d寻路功能

    12. 服务端支持repl,也可以动态执行一段新代码

    这样就可以打印出进程中任何数据,大大简化了服务端查找问题的难度,开启repl方法,直接在console中输入repl回车即可进入repl模式

    13.打包工具

    ET框架带有一整套打包工具,完全傻瓜式。一键打包,自动分析共享资源。对比md5更新

    14.还有很多很多功能,我就不详细介绍了

    a.及其方便检查CPU占用和内存泄漏检查,vs自带分析工具,不用再为性能和内存泄漏检查而烦恼
    b.使用NLog库,打log及其方便,平常开发时,可以将所有服务器log打到一个文件中,再也不用一个个文件搜索log了
    c.统一使用Mongodb的bson做序列化,消息和配置文件全部都是bson或者json,并且以后使用mongodb做数据库,再也不用做格式转换了。
    d.提供一个强大的ai行为树工具
    e.提供一个同步工具
    f.提供命令行配置工具,配置分布式非常简单

    ET框架的服务端是一个强大灵活的分布式服务端架构,完全可以满足绝大部分大型游戏需求。使用这套框架,客户端开发者就可以自己完成双端开发,节省大量人力物力,节省大量沟通时间。

    更多相关内容
  • ET框架使用了类似守望先锋的组件设计,所有服务端内容都拆成了一个个组件,启动时根据服务器类型挂载自己所需要的组件。这有点类似电脑,电脑都模块化的拆成了内存,CPU,主板等等零件,搭配不同的零件就能组装成一...
  • ET框架Demo

    2019-04-02 12:22:38
    ET框架Demo大家可以查看并学习一下。
  • ET框架视频教程.txt

    2021-02-24 14:13:30
    unity ET开元框架视频教程
  • 1. .Net Core 6.0的安装 2. Visual Studio2022版本的安装 3. 数据库 MongoDB 4.x 及以上版本的安装 4. Robo 3T 数据库可视化软件 5. ET框架 Github项目的拉取 6. Unity工程的打开

    学习目标:

    ET框架-开发环境搭建


    学习内容:

    1. .Net Core 6.0的安装
    2. Visual Studio2022版本的安装
    3. 数据库 MongoDB 4.x 及以上版本的安装
    4. Robo 3T 数据库可视化软件
    5. ET框架 Github项目的拉取
    6. Unity工程的打开

    学习时间:

    2022.2.19

    学习产出:

    1. .Net Core 6.0的安装

    官方下载链接
    在这里插入图片描述
    我们下载sdk
    在这里插入图片描述
    在这里插入图片描述
    然后我们进入控制台,检查我们是否安装成功
    按住Win+R输入cmd,然后进入控制台
    在这里插入图片描述
    输入如下命令,显示版本为6.0以上即表示安装成功
    在这里插入图片描述

    2.Visual Studio2022版本的安装与配置

    官方下载链接
    在这里插入图片描述
    点击下载,我们必须选择如下包
    在这里插入图片描述
    在这里插入图片描述
    这三项记得一定要勾选
    然后安装就行了

    安装完成之后,打开VS2022,打开工具–选项
    在这里插入图片描述
    需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False
    在这里插入图片描述

    3.数据库 MongoDB 4.x 及以上版本的安装

    官方下载链接
    在这里插入图片描述
    选择对应版本
    在这里插入图片描述
    数据库不建议放c盘
    在这里插入图片描述

    这里切记勾选这个选项,要不然会卡很久
    在这里插入图片描述
    然后我们进入系统环境变量,将数据库的bin目录加入到路径
    在这里插入图片描述
    在这里插入图片描述
    复制该路径
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    控制台输入mongo显示版本信息即表示配置完成
    在这里插入图片描述

    4.Robo 3T 数据库可视化软件

    官方下载链接
    在这里插入图片描述
    在这里插入图片描述

    5.ET框架 Github项目的拉取

    Github项目链接
    这个ET是UWA学堂老师二进制创建的一个Git仓库,保持和ET同步,并且多了几个商业级UI组件
    我们在SourceTree克隆我们的项目
    在这里插入图片描述
    我们可以看到作者会有很多次的更新,这也是我们为什么要用Clone的方式来学习,因为这样我们可以随时去拉取获得最新的版本
    在这里插入图片描述
    我们可以找到我们本地的仓库,打开Unity文件夹
    在这里插入图片描述
    然后就会发现这是我们熟悉的Unity工程
    在这里插入图片描述

    6.Unity工程的打开

    我们首先在UnityHub点击打开项目
    在这里插入图片描述
    然后找到对应Unity的文件夹
    在这里插入图片描述
    点击选择Unity2020.3以上的Unity打开即可
    在这里插入图片描述

    展开全文
  • 资源是初见大佬写的ET4.0版本的斗地主,便于新手去掌握ET框架,ET4.0熊猫大佬将持续更新。这个demo也将非常好用
  • 特性基于ET6.0框架: : 使用Addressables资源管理使用一个新的UI框架AkaUI需要用ILRuntime热更新时,到时此UI框架可以无缝放到ILRuntime中游戏逻辑代码与ET框架分开到不同工程中基于ET特性实现的一个只能提示出牌的...
  • 1.为什么ET的逻辑层也能调用UnityEngine的API 2.编写事件的订阅和发布 1.首先,我们进入脚本, 编写我们自己事件的结构体 2.在创建电脑实体的地方,进行事件的抛出 3.我们对抛出的事件进行处理,我们创建对应的...

    1.为什么ET的逻辑层也能调用UnityEngine的API

    首先,我们之前的规则便是,只有在视图层的HotFixView层才能调用UnityEngine的API。
    但是我们在09节,我们添加复杂的数据类型的时候,我们就引用到UnityEngine的Vector3
    这样会报错吗?
    不会!
    作者已经在这里对UnityEngine进行了实现,所以我们可以在逻辑层对Vector3进行引用
    因为我们引用的并不是真实的UnityEngine,而是作者自己写的一个UnityEngine
    在这里插入图片描述

    2.编写事件的订阅和发布

    1.首先,我们进入脚本, 编写我们自己事件的结构体

    在这里插入图片描述
    在这里插入图片描述

    2.在创建电脑实体的地方,进行事件的抛出

    在这里插入图片描述

    3.我们对抛出的事件进行处理,我们创建对应的文件夹,和处理函数

    在这里插入图片描述
    在这里插入图片描述

    4.在创建电脑实体的地方,完成事件抛出之后,启动电脑

    在这里插入图片描述
    在这里插入图片描述
    成功
    在这里插入图片描述

    5.我们采取异步的方式,来处理抛出

    在这里插入图片描述
    我们可以新加上一个等待的方法,异步调用的话,我们就会等待一秒钟才会加上这些组件
    在这里插入图片描述

    3.显示层抛出带有UnityEngine的API的事件EventType

    我们在HotfixView里面自己定义一个EventType脚本

    在这里插入图片描述
    然后我们就可以引用UnityEngine的东西了,比如GameObject
    在这里插入图片描述

    展开全文
  • 1. 服务器处理顶号操作 1.1 我们定义一个管理session的组件 1.2 为我们管理session组件添加System 1.3 我们去为创建的Scene添加上我们的组件 1.4 将已经上线的Session进行关闭,然后更新我们组件中的...

    1. 服务器处理顶号操作

    1.1 我们定义一个管理session的组件

    在这里插入图片描述
    组件中得有一个字典,保存全部的session
    这里有个疑问?
    为什么我们要保存两个long,accountId和instanceId,为什么不保存对session的引用呢?这样不麻烦吗
    在这里插入图片描述

    1.2 为我们管理session组件添加System

    在这里插入图片描述
    在这里插入图片描述

    1.3 我们去为创建的Scene添加上我们的组件

    在这里插入图片描述
    在这里插入图片描述

    1.4 将已经上线的Session进行关闭,然后更新我们组件中的SessionInstanceId

    我们可以获取到之前登录账户的SessionInstanceId,然后去Game里面拿到
    如果不为空,就代表存在,则将其断开
    然后更新我们组件中的SessionInstanceId
    这里的Add方法,我们在上面定义是,存在即更新的操作
    在这里插入图片描述
    这个消息呢,我们在这里定义
    在这里插入图片描述

    在这里插入图片描述

    1.5 十分钟等待,如果玩家还没有进行下一步操作,我们就断开Session,避免客户端一直占用Account服务器

    定义一个组件AccountCheckOutTimeComponent,专门用来计时然后断开
    在这里插入图片描述
    在这里插入图片描述
    我们断开连接的方法,如下
    在这里插入图片描述
    我们此时定义一个新的TimerType
    在这里插入图片描述
    然后我们在组件Awake的时候,开启Timer方法
    也就是说,十分钟之后调用我们的DeleSession方法
    在这里插入图片描述
    不过,有的时候我们的Session是直接断开的,所以我们需要清空我们的Timer
    在这里插入图片描述

    1.6 挂载上AccountCheckOutTimeComponent组件

    在这里插入图片描述
    现在我们的session无论任何清空都会在十分钟后自动断开,不会一直占用服务器资源了

    2. 运行测试

    2.1 Excel表配置Account服务器

    在这里插入图片描述
    添加一行我们自己Account服务器的数据
    在这里插入图片描述

    2.2 服务器修改登录的IP地址

    在这里插入图片描述
    重新生成项目
    在这里插入图片描述
    Unity Build Code
    在这里插入图片描述
    然后运行服务器,运行客户端
    在这里插入图片描述

    2.3 我们故意保留空的字符串,然后点击登录

    在这里插入图片描述
    在这里插入图片描述
    客户端收到消息
    我们发现ErrorCode为200003
    在这里插入图片描述
    原因是客户端发来空的字符串,所以我们服务器认为是错误
    然后定义错误码进行返回提示
    在这里插入图片描述

    2.4 正常登录

    首先打开数据库
    在这里插入图片描述
    输入账号密码然后点击登录
    我们发现服务器给我们返回了Token和AccountId
    在这里插入图片描述
    数据库也存入了账号
    在这里插入图片描述

    展开全文
  • 学习目标: ET框架-Demo工程的编译与运行 学习内容: 1.Unity工程代码编辑器的设置 2.服务器配置 3.运行Server.App 4.手动去编译Unity客户端代码 5.运行客户端 6.打包客户端(以及打包BUG解决) 7.运行测试 学习时间...
  • 注意!现在master(6.0版)还在开发中,不过基本架构已经完成 ET的介绍: ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,...ET框架使用了类似守望先锋的组件设计,所有服务端内容都拆成了一个个组件,启动时
  • ET框架-组件模式

    千次阅读 2020-06-28 09:57:11
    组件是高度可以复用的,比如一个NPC,他也可以移动,给NPC也挂上MoveComponent就行了,有的NPC也可以施放技能,那么给它挂上SpellComponent,NPC不需要背包,那么就不用挂ItemsComponent了 ET框架模块全部做成了...
  • ET框架的事件系统(定义,发布,订阅),和ET框架下的异步编程(ETTask,async,await,Coroutine),以及与Unity提供的协程的比较。
  • 文章目录ET框架的基础逻辑ECS思想和OOP思想的区别ECS下简易的逻辑的分发ET框架下实体的生命周期ET框架的Scene树 ECS思想和OOP思想的区别 ​ 以传统RPG游戏为例,游戏中可能有Player,NPC,Monster等角色。传统的OOP...
  • ET6.0运行指南详细
  • ET框架6.0Demo运行学习笔记

    千次阅读 2022-01-04 08:52:38
    ET框架,C#双端框架
  • ET框架-ECS

    千次阅读 2020-06-28 09:47:08
    ET在设计的时候吸收了这些想法,但是并不完全照搬,目前的设计是我经过长期的思考跟重构得来的,还是有些自己特色。 传统的ECS写逻辑作者看来存在不少缺陷,比如为了复用,数据必然要拆成非常小的颗粒,会导致组件...
  • 正因为这样的设计,ET框架可以将所有的服务器组件都挂在一个服务器进程上,那么这个服务器进程就有了所有服务器的功能,一个进程就可以作为整组分布式服务器使用。这也类似电脑,台式机有所有的电脑组件,那它也完全...
  • ET框架 如何使用它开发游戏

    千次阅读 2021-03-07 17:03:05
    ET5.0
  • ET框架的搭建

    千次阅读 2020-03-14 01:05:03
    1:想必大家可能很少听过ET框架 用的是c# .net core 做的服务端 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高。开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者...
  • 接下来说回ET ET开源仓库地址 ET是一个开源的双端框架,使用了ECS的思想进行开发(并不全是ECS),而且还是可以分布式的,开发效率高、性能也强,两边可以共享代码,使用了ILR来热更,服务器都可以不停机直接更新了...
  • ET框架提供的Excel用法,配置过程,自动生成持久化类和对应Categroy源码,自动将数据实例化成持久化对象提供单例类访问数据对象,提供灵活的配置模式,满足服务器和客户端的配置需求。
  • ET框架学习链接

    2020-09-21 15:22:24
    ET框架交流论坛:https://et-framework.cn/d/25-et40 基于ET5.0的网络斗地主案例:https://www.taikr.com/login
  • ET框架学习笔记之编译运行Demo

    千次阅读 2022-03-23 14:37:21
    一:Clone ET的整个项目工程下来 链接 二:使用unity打开项目Unity工程(第一次启动需要优先打开一遍) 三:打开Client-Server的sln文件 四:优先编译Mono,然后是整个Client,最后是整个Client-Server 五:启动...
  • ET框架自动引用UI组件

    2020-05-06 12:29:43
    写这篇博客的初心,是在学习ET框架时,看到UI组件的引用使用到ReferenceCollector这个类来保存需要引用的组件,但是这个类需要开发者自己定义组件名与拖动关系,想到开发中一个个的命名拖动有点麻烦,便自己写了一个引用...
  • 如果你在unity上点击运行,然后出现登录界面,点完登录没有反应,出现ET.RpcException:10061错误,那基本是因为你没有运行Server.App文件。 你不需要点开Unity.sln。(实际上我想重新生成这个解决方案但却出现了一千...
  • 【Unity】ET框架学习笔记

    千次阅读 2018-11-12 10:10:48
    9-10开始初学et框架 懂的不多 只说自己了解到的部分 运行 1.先下载ET框架然后根据指南运行 2.客户端 目前已支持2018,自动生成解决方案;2017以前需要在vs生产解决方案和添加引用 3.服务端 用vs2017打开ET/...
  • UNITY ET 框架

    千次阅读 2019-11-03 10:48:00
    GITHUB上近3000星的开源框架,包括了服务器客户端,IL RUNTIME热等特点,对于新项目,值得拥有
  • Unity多语言(基于ET框架

    千次阅读 2021-11-24 14:05:42
    } } /// /// 读取当前语言配置(ET为例) /// void ReadFiles() { Strings.Clear(); var configs = Game.Scene.GetComponent().GetAll(typeof(Localization)); if (!configs.Any()) { Debug.LogError("Localization...
  • ET 之网络框架

    千次阅读 2021-01-28 15:20:38
    阅读这篇文章要求对ET框架的ECS结构有所了解 ET框架简介: ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,156
精华内容 13,262
关键字:

et框架

友情链接: xilinx-vip-api-2019-1.zip