Ver Fonte

更新ET8预览版说明

tanghai há 2 anos atrás
pai
commit
c5d2e130cb

+ 20 - 53
Book/1.1运行指南.md

@@ -1,84 +1,51 @@
 # 运行步骤  
 01. visual studio用户须知:
    - 版本:
-      - Win10及以上用户,使用.net6, VS 版本,必须使用2022及以上。注意,VS 2019 不支持 .net6,不能使用。
-   - 依赖:
-     - 需要安装"使用Unity的游戏开发"扩展。
-     - 需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错。
+      - Win10及以上用户,使用.net6, VS 版本,必须使用2022及以上。注意,VS 2019 不支持 .net6,不能使用。  
+   - 依赖:  
+     - 需要安装"使用Unity的游戏开发"扩展。  
+     - 需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错。  
+   - 不提供vs技术支持,用vs的用户请自己研究,不要来问我,我自己也没用过  
 
-02. 使用Rider2022.2.1(更新到最新版), 需要安装以下内容:
+02. 使用Rider2023.1.3(更新到最新版), 需要安装以下内容:
    - Rider的Unity插件  
    - 安装 .net6  
 
-03. master分支需要unity2021.3版(用到了C#10的语法)  
+03. master分支需要unity2021.16版(用到了C#11的语法)  
 
-04. 启动Unity, Edit->Preferences->External Tools External ScriptEditor选择VS或者Rider, Generate .csproj files for全部不要勾选    
+04. 启动Unity, Edit->Preferences->External Tools External ScriptEditor选择VS或者Rider, Generate .csproj files for全部不要勾选,VS需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错。  
 
 05. Unity菜单 File -> Open Project... -> Open 选中ET/Unity文件夹,点击选择文件夹按钮。  
 
-06.  点击Unity菜单 Assets -> Open C# Project 启动vs  
+06. 点击Unity菜单 Assets -> Open C# Project 启动IDE  
 
-07.  打开Unity菜单ET/BuildTool 点击BuildModelAndHotfix,这一步将编译客户端代码  
+07. 选中Resources/GlobalConfig,把AppType选择Demo(状态同步)或者LockStep(帧同步)  
 
-08.  用Rider打开 ET/ET.sln 编译(**一定要全部工程编译,右键VS解决方案,全部编译**)  
+08. 打开Unity菜单ET/BuildTool CodeMode选择Client Server, 点击ReGenerateProjectFiles。  
 
-09. Unity中双击Scenes目录中的Init场景,点击Play即可运行  
+09. 打开ET.sln, 编译Unity.AllHotfix工程,Model Hotfix ModelView HotfixView加载失败没有关系   
 
-10. 注意这是ClientServer模式,Unity中运行了一个服务器。如果需要单独运行服务器,可以按照下面步骤:  
+10. Unity中双击Scenes目录中的Init场景,点击Play即可运行   
 
-11. 打开Unity菜单ET/ServerTool, 点击StartServer,启动服务器  
-
-12. 打开Unity菜单ET/BuildTool CodeMode选择Client, 点击BuildModelAndHotfix,这一步将编译客户端代码  
-
-13. 选中Resources/GlobalConfig,把AppType改成Demo,Unity中双击Scenes目录中的Init场景,点击Play即可运行  
+11. 帧同步默认是一个人匹配,如果需要多人匹配,修改LSConstValue中的MatchCount即可  
 
 # 打包过程:
-1.点击HybridCLR->Installer,把两个main改成2.31,点击安装,等待安装完成
-2.ET->BuildTool->BuildModelAndHotfix,编译好要热更的dll
-3.点击HybridCLR->Generate->all
-4.点击打包 (注意,这是第一次打包)
-5.点击HybridCLR->CopyAotDlls,这一步会把需要补充元数据的dll复制到Assets/Bundles/AotDlls目录,并且设置ab包标签
-6.点击打包 (注意,这是第二次打包)
-7.如果提示meta不一致,说明没有打包两次
-
-
-
-# 帧同步运行:
-01. 启动Unity, Edit->Preferences->External Tools External ScriptEditor选择VS或者Rider, Generate .csproj files for全部不要勾选,VS需要在"工具-选项-适用于Unity的工具-常规"里,把杂项里的禁止完整生成项目改为False,否则导致你Codes目录里的代码报错。  
-
-02. Unity菜单 File -> Open Project... -> Open 选中ET/Unity文件夹,点击选择文件夹按钮。  
-
-03. 点击Unity菜单 Assets -> Open C# Project 启动IDE  
-
-04. 选中Resources/GlobalConfig,把AppType改成LockStep  
+1.点击HybridCLR->Installer,点击安装,等待安装完成  
+2.用Rider,编译好Unity.AllHotfix  
+3.点击HybridCLR->Generate->all  
+4.点击HybridCLR->CopyAotDlls,这一步会把需要补充元数据的dll复制到Assets/Bundles/AotDlls目录  
+5.点击打包  
 
-05. 打开Unity菜单ET/BuildTool CodeMode选择Client Server, 点击ReGenerateProjectFiles。  
 
-06. 打开ET.sln, 编译Unity.AllHotfix工程,Model Hotfix ModelView HotfixView加载失败没有关系   
 
-07. Unity中双击Scenes目录中的Init场景,点击Play即可运行   
+# 运行:
 
-08. 默认是一个人匹配,如果需要多人匹配,修改LSConstValue中的MatchCount即可  
-
-09. 帧同步打包过程注意,同上面打包一样,区别是为了方便测试,我让打出来的包直接加载了Unity/Temp/Bin/Debug/Model.dll跟Hotfix.dll。代码在CodeLoader.cs 42跟76行,大家真正打包应该加载ab包中的dll资源,要使用上面注释的代码  
 
 # ENABLE_DLL模式  
 1. 该模式用于逻辑全热更新,还有热重载, 默认就是使用该模式  
 2. 在Unity菜单ET->ChangeDefines中开启关闭  
 3. 逻辑打成了一个Model.dll跟Hotfix.dll,unity加载dll运行,这样Unity Editor将无法引用逻辑代码。如果Editor需要用到逻辑代码,可以关闭ENABLE_DLL模式  
 
-
-# 测试状态同步demo
-1. 想修改配置就进入 Excel 目录修改对应的表格,做运行步骤的第6步,然后重新运行 Server.App工程来启动服务端。
-
-2. Unity->tools菜单->打包工具,选择PC,勾选是否打包exe,点击开始打包,打出一个PC包在Release目录下。
-
-3. 运行Unity 登录 进入大厅 进入场景
-
-4. 运行PC包 登录 进入大厅
-
-5. 点击鼠标右键即可移动人物
-
 # 注意事项:
 
 一. 出错原因都是:  

+ 57 - 8
README.md

@@ -2,6 +2,60 @@
 
 # __讨论QQ群 : 474643097__  
 
+# ET8 预览版! 17岁亦菲  
+1. 多线程多进程架构,架构更加灵活强大  
+2. 抽象出纤程(Fiber)的概念,类似erlang的进程,非常轻松的创建多个纤程,利用多核  
+3. 纤程调度: 主线程,线程池,每个纤程一个线程,3种调度方式  
+4. Fiber间通信的Actor消息机制  
+5. Entity方面,domain改成IScene,只要实现IScene接口,Entity就是domain,这样定义domain更加自由  
+6. 预测回滚的帧同步实现  想详细了解可以看帧同步课程  
+7. protobuf换成了memorypack,实现无gc的网络  
+8. 纯C#版的kcp库,性能非常强,由sj提交  
+9. 热更dll改成用ide编译,更加方便  
+10. sj利用source generater实现了代码自动模板功能,目前可以自动生成System类,开发者只需要定义Awake Update静态方法即可,特别方便  
+11. sj开发了分析器,实现了EntitySystemOf,根据entity接口一键生成对应的system方法  
+12. 客户端利用fiber实现网络独立线程(demo已实现),甚至可以把逻辑跟表现使用独立的纤程,更好的利用多核  
+13. 帧同步demo直接利用纤程创建房间,更加方便  
+
+# ET8课程临时大纲,后面会有细节调整, 需要课程请联系熊猫 QQ:80081771  
+1.跟ET7的区别,运行指南,切换demo  
+2.多进程单线程  多进程多线程 优劣比较,帧同步 内存 性能 开发难度  
+3.框架的设计,整体大致介绍  
+4.World详解,几种Singleton,线程安全的思考(热重载代码,热重载配置),找到临界区  
+5.纤程的概念,为什么要有纤程,纤程调度  
+6.Fiber Entity IScene 几种设计的方案 Instance?  
+7.Fiber间通信: Actor消息 ActorMessageQueue ActorId ActorInner  
+8.多线程安全(Fiber创建删除)以及同步上下文的处理,unity回调的处理  
+9.客户端网络设计  
+10.服务端ActorInner ActorOuter ActorSender  
+11.服务端Actor流程  
+12.如何利用纤程设计游戏架构  
+
+# 双端预测回滚帧同步框架课程有需要请加QQ:80081771    
+# [帧同步预告视频](https://www.bilibili.com/video/BV1tX4y1C7pM/?share_source=copy_web&vd_source=001b901865c99550d1b2a8cd663695d4)  
+### 1. 网络多线程0GC实现,优美的实现,性能提升  
+### 2. ET框架调整:  
+    a. EntityRef Entity弱引用机制  
+    b. Entity不再统一注册到Root中,只有Actor对象挂载了MailboxComponent的注册到  ActorMessageDispatcherComponent中  
+    c. TypeSystem EntitySystemSingleton,可扩展的Entity System机制,自定义System极其轻松  
+    d. Domain IScene, 更完善,Scene的代码都简化了  
+    e. Entity中Components改成SortedDictionary,保证有序  
+    f. Mongo序列化BeginInit, 增加了一个SerializeSystem  
+    g. 配置文件改成了Bson,直接支持Dictionary以及更复杂的配置  
+### 3. 实现了一个极其优美的预测回滚的帧同步框架,包含客户端跟服务端。注意,并不是只能做帧同步,帧同步框架只是ET框架一小部分  
+    a. 帧同步专用的LSEntity,LSWorld帧同步定点数domain  
+    b. LSUpdateSystem 处理帧的Update逻辑  
+    c. LSRollbackSystem 处理表现层和解   
+    d. 客户端可膨胀收缩的FixedUpdate  
+    ......
+### 4. 逻辑层表现层分离,前后端共享逻辑层实现, 服务端会同时跑战斗,杜绝结果作弊  
+### 5. 帧同步预测回滚实现  
+### 6. 客户端时间动态膨胀收缩  
+### 7. 录像文件随时保存,播放可以随意跳转播放,加速播放  
+### 8. 断线重连,瞬间重连  
+### 9. ET状态帧实现方式,学会ET帧同步,状态帧非常简单。
+### 10.还有更多同步方式......  
+
 # 熊猫的课程:《网络游戏架构设计》已经完结,有需要请加QQ:80081771 课程详细介绍了ET框架的设计思路跟细节,以下是课程目录:
 01. 代码结构
 02. All In one-01
@@ -174,13 +228,6 @@ ET框架是一个强大灵活的分布式服务端架构,完全可以满足绝
 [ET启动配置](http://www.cnblogs.com/fancybit/p/et2.html)  
 [框架demo介绍](http://www.jianshu.com/p/f2ea0d26c7c1)  
 [linux部署](http://gad.qq.com/article/detail/35973)  
-[linux部署,mongo安装,资源服搭建](http://www.tinkingli.com/?p=25)  
-[ET框架心跳包组件开发](http://www.tinkingli.com/?p=111)  
-[ET框架Actor使用与心得](http://www.tinkingli.com/?p=117)  
-[基于ET框架和UGUI的简单UI框架实现(渐渐写)](http://www.tinkingli.com/?p=124)  
-[ET框架笔记 (笑览世界写)](http://www.tinkingli.com/?p=76)  
-[ET框架如何用MAC开发](http://www.tinkingli.com/?p=147)  
-[ET的动态添加事件和触发组件](http://www.tinkingli.com/?p=145)  
 
 商业项目:  
 1. [千古风流](https://www.qiangu.com/)  
@@ -190,12 +237,14 @@ ET框架是一个强大灵活的分布式服务端架构,完全可以满足绝
 5. 天天躲猫猫2(ios2019春节下载排行19)  
 6. [牛虎棋牌](https://gitee.com/ECPS_admin/PlanB)  
 7. [五星麻将](https://github.com/wufanjoin/fivestar)  
+8. [神选誓约](https://www.taptap.cn/app/248095)  
+9. [代号肉鸽:无限](https://www.taptap.cn/app/247225)  
 
 群友demo:  
 1. [斗地主(客户端服务端)](https://github.com/Viagi/LandlordsCore)  
 2. [背包系统](https://gitee.com/ECPS_admin/planc)  
 3. [移动端渲染技术demo](https://github.com/Acgmart/Sekia_TechDemo)  
-
+4. [球球大作战(ET7.2)](https://github.com/FlameskyDexive/Legends-Of-Heroes)
 
 
 视频教程:  

+ 11 - 0
Unity/Assets/Scripts/Model/Server/Module/Http/HttpComponent.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e0de2584d06993846b20ba44c51b8a0b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
Unity/Assets/Scripts/Model/Server/Module/Http/HttpHandlerAttribute.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 536bf765aeb46c44e9d0618fb418c76a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
Unity/Assets/Scripts/Model/Server/Module/Http/IHttpHandler.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 850082c851b74ff419893672cb613cf3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: