了解ET

[Github]
[ET论坛]

ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端.

[具体介绍]

  • [ETBook] 为什么使用C# .net core做服务端?
    • ET框架使用C#做服务端,现在C#是完全可以跨平台的,在linux上安装.netcore,即可,不需要修改任何代码,就能跑起来。性能方面,现在.netcore的性能非常强,比lua,python,js什么快的多了。做游戏服务端完全不在话下。
  • 为什么选择ILRuntime热更?
    • 这世界上没有ios上不能用的热更方案,因为除了ios以外根本不需要任何热更方案就能直接热更
    • 因为ios的限制,之前unity热更新一般使用lua,导致unity3d开发人员要写两种代码,麻烦的要死。之后幸好出了ILRuntime库,利用ILRuntime库,unity3d可以利用C#语言加载热更新dll进行热更新。ILRuntime一个缺陷就是开发时候不支持VS debug,这有点不爽。ET框架使用了一个预编译指令ILRuntime,可以无缝切换。平常开发的时候不使用ILRuntime,而是使用Assembly.Load加载热更新动态库,这样可以方便用VS单步调试。在发布的时候,定义预编译指令ILRuntime就可以无缝切换成使用ILRuntime加载热更新动态库。这样开发起来及其方便,再也不用使用狗屎lua了
  • [ETBook] 为什么后端选MongoBson序列化库?
  • [ETBook] 为什么选MongoDB数据库?
  • [ETBook] 什么是组件式设计?
    • ET在设计的时候吸收了这些想法,但是并不完全照搬,目前的设计是我经过长期的思考跟重构得来的,还是有些自己特色。
  • [猫大语录] 为什么在ET4.0之后不附带帧同步Demo?
  • [猫大语录] 为什么在ET4.0之后服务器命令行没有log?

版本区别

简单的说说ET6.0 beta(master)的设计。

目前还没到正式使用的程度, 先学习思路

  1. 之前每个功能是一个进程,比如realm gate location map,现在改成每个功能是一个Scene,一个Scene可以放到一个进程中。这样一台物理机先启动固定的进程,然后各个scene放到进程中运行。非常类似docker。
  2. 所有的Scene放在一个进程就变成了AllServer模式
  3. 服务器内部全部使用actor发送消息,比如realm发给gate,其实是发个actor消息到gate scene
  4. dbserver将取消,每个进程直连mongodb,使用异步调用存取数据
  5. 协程锁简化了很多实现,例如location队列,actor队列,mailbox消息队列,全部使用协程锁实现,代码非常精简。
  6. Scene可以开服前配置好在哪个进程(比如realm gate)也可以动态创建(比如副本,分线场景)。动态创建Scene回收Scene非常简单。

运行Demo前的准备事项

  1. IDE选择

    • VS
      • ET 6.0 beta (master)
        • 只能用VS2019 (.net core 3.0)
      • ET 5.0
        • 建议使用VS2019 ( 用2017就自己去官网下 .net core 2.2)
      • ET 4.0分支使用vs2017(更新到最新版),并且要勾选
        • a. .net 桌面开发
        • visual studio tools for unity
        • .net core 2.1
    • Rider
      • 安装 对应的 .net core
    • other…..
  2. Unity版本选择

建议使用对应版本, 其他版本自行测试

  • ET6.0beta (master)
    • [x] unity 2018.4.10f1
    • [x] unity 2018.4.11f1
  • ET5.0
    • [x] unity2018.4
  • ET4.0
    • [x] unity2017.4
  • 为什么是.4版本
  • 别问怎么破解.问就是个人免费版.
  1. 安装MongoDB数据库(Demo中注释了数据库组件)

准备运行Demo

请先按照运行指南走一遍, 该编译的编译,该启动的启动

  • 常见的错误解决方法
    • 2L: 运行环境net CDK不匹配问题
    • 3L: 运行环境问题
    • 4L: Unity DLL引用错误问题
    • 5L: 打包EXE运行黑屏问题
    • 6L: ILRuntime一些问题
    • 7L: 服务端部署在云服务器问题
    • 8L: 打包IL2CPP问题
    • 9L: Android9 HTTP问题无法使用UnityWebRequest的问题
    • 10L: Reference Collector脚本无法修改key值
    • 11L: Win32Exception找不到指定文件,WIN10文件权限
    • 12L: KCP.android.ARM64问题
  • ET6.0问题收集
    • 启动服务器命令行参数错误
    • 6.0 beta版 release后运行会出现bug

测试状态同步Demo

打包一个客户端,unity开一个客户端.就会出现2个小人.点击鼠标右键即可移动人物.看到效果.

帧同步Demo

在4.0分支.

学习ET

你可能需要如下知识储备:

客户端

  • Unity基础
  • UGUI
  • AssetBundle流程
  • 热更ILRuntime

其余

  • AstarPathfinding
  • recastnavigation
  • Behavior Designer
  • FGUI
  • NLog

猫大语录:
应该先去提高下c#基础跟编程基础,再来看ET,碰到问题自己想办法解决,谷歌,打log。你现在好比初中基础却来做大学题目一样,到处碰壁,碰到问题自己不研究指望别人给你找问题,这样编程技术是无法提高的.
群里能力有高有低,问问题也没什么。但是我是希望群里提问题前能够经过自己一番摸索,经过自己思考,经过谷歌,经过调试log等等再问。很多问题经过自己摸索查找资料能够增长很多知识。其实程序开发就是在不断找bug,在找bug中提升自己。

ET框架设计大纲

ET的一些教学视频

6.0

5.0及以前版本

群内大佬的Github

群内大佬分享的一些工具/组件

ET学习笔记/博客/公众号

相关技术的教学文章

MongoDB

ILRuntime

FGUI

论坛答疑