Bug - ET社区 (et-framework.cn)
小弟的ET笔记 (yuque.com)
e-mano 架构 et架构_mob6454cc64c0a4的技术博客_51CTO博客https://blog.51cto.com/u_16099188/6448617
初始化服务器
ET的核心方法:CodeLoader
服务器的App会生成在Bin目录下
首先,找到当前程序集的Model程序集加载。
然后,去Bin目录下生成的HotFix.dll文件加载程序集。
然后通过反射调用静态方法:Entry.StartAsync().Coroutine()
[MongoHelper].Register,注册可序列化的结构体
(LSInput:MemoryPackable;Unity.Mathematics.float2;TrueSync.FP:Serializable)
通过CodeTypes中缓存的对象类型,[BsonClassMap].LookupClassMap处理每一个类型。
添加单例,Awake单例:Id,网络协议,对象池,消息队列,网络服务,Nav,Log
Fiber.Init-> 服务端客户端跑了同一份逻辑
FiberInit_Main
Fiber
image.png老版本:通讯序列化IO消耗等
新版本:共享进程的内存,不需要传递消息,并且Fiber带来了线程不会竞争内存的线程安全
image.png image.png
image.png
image.png
image.png
线程池性能更好;固定线程调试更方便
Scene
玩法结构设计
事件代码写法
1.在AllModel目录中定义事件。
服务器用的放在Server中,客户端用的放在Client中,共享的放在Share中。目前写客户端先都放Client。
增加脚本:xxxEventType。然后在里面定义结构体。
2.在AllHotfix目录中编写事件。
目录同上,写法很正常。PulishAsync发送,这里面就能接收到了。
登录7.0
Actor模型7.0
客户端结构
机器人客户端(伪客户端)
登录流程
ET EntitySystem
EntitySystemSingleton的Awake中通过反射注册所有的System类型。
首先找到,带[EntitySystem]标签的Class,其中大部分是生成的代码。
如果它继承自 IAwake, IDestroy, ILoad, ...等或自定义的ISystemType,
就会使用TypeSystems去创建或获取:OneTypeSystems,对应Max的QueueFlag,对应InstanceQueueIndex:None-1,Update0,LateUpdate1,Load2,...
然后把Entity类型和创建的System对象完成一对多的映射。然后如果这个System对象的QueueFlag不是带更新的,就是默认是None,那么就不设置QueueFlag。
Entity在被创建后,IsRegisted或者设置IScene,会调用到RegisterSystem。
如果Entity没有任何System,会返回。否则会记录。
如,第一个TimerCom,有IAwake和IUpdate。
在EntitySystem的RegisterSystem中,会完成,带QueueFlag的Update类型的增添。
在后面的Update中,它通过双向队列,完成对Disposed的Entity的移除。其他的都会保留在队列里被不断Update。
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
YIUI
插件:UIEffect
Loop列表制作
1.制作一个单独的页面,是Loop。
Publish
Win
1.安装.net环境
cmd: dotnet --info 弹出来说明装好了
2.打开ET工程,编译后发布
2.1ps发布:
双击PowerShell文件,生成一系列的Publish内容。包含.exe。全部拷贝到服务器电脑运行exe即可。
3.客户端连接配置:ConstValue修改地址为服务器外网地址
表格修改:
StartMachineConfig修改。有几个服务器,就部署几个,如果就只有一个,那就只填写一个。
Release
Win
说明1:编辑器下模拟打包环境:Define.IsEditor设置为false。
说明2:YIUI的资源名称是唯一的,因此要改一下熊猫的资源加载路径。
打包全流程,及作用。
-
补充元数据:Odin补充元数据,塞到HybridCLR的配置元数据列表里。这样会把dll自动拷贝到Bundle的aotdll目录。
- 重点!!添加宏定义:ENABLE_IL2CPP,它会在运行时加载到元数据补充。
-
右键编译AllHotfix程序集,这是为了能在Debug目录下生成需要打进资源包的Hotfix.dll和Model.dll。
路径:.\MTDET\Unity\Temp\Bin\Debug\Unity.AllHotfix\Unity.AllHotfix.dll
同时会在生成后把文件拷贝到Bundles/Code路径,是在AllHotfix.csproj中设置的:
-
HybridCLR点击。编译,生成所有,拷贝AOT。这个工具主要是为了在IL2CPP模式下的代码热更新。IL2CPP模式下应该可以适应苹果的代码热更新。点击编译是为了指定平台,点击生成所有是为了生成对应版本的所有代码变成代码资源,点击拷贝AOT是把元数据补充一下否则在上一个步骤可能会因为代码裁剪丢失一部分代码库的引用。
-
YooAssetBuilder点击构建:会把Bundle目录下面的东西搞到StreamingAssets目录下?(这是一个只读、不可写的目录;该文件夹下的资源会保持原始格式,dll或脚本放在里面也不会参与编译)
-
点击BuildPackage:就和点击Unity的打包其实是一样的。
网友评论