Unity基础知识学习七,帧同步源码学习
前言
在学习帧同步框架源码之前,先过一遍基础知识:Unity基础学习六,网络同步_u013617851的博客-CSDN博客
github地址:GitHub - JiepengTan/Lockstep-Tutorial: 帧同步 教程
1.ServeraLifeCircle服务端
服务端ServerLauncher.Main() 启动入口:

服务端Server收到协议,进入Dispatch()分发函数:

2. new ClientLifeCycle 客户端

启动和初始化Awake:

启动和初始化Start:

收到网络协议:

Unity脚本Update()函数,以及帧同步真的_Update()帧的更新:

3.启动服务端的方法
3.1 代码目录新建一个dll项目




3.2 添加LockstepEngine和SimpleServer的解决方案



3.3 给SimpleServer加上引用


3.4 修复 AssemblyInfo.cs 特性重复报错

顺便在配置文件SimpleServer.csproj中
</PropertyGroup>中
加入一行<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

然后把报错点开的那个XXXXXXXXXXXX.AssemblyInfo.cs文件,用资源管理器打开,删除掉。
重新对SimpleServer右键清理,右键编译。
3.4 安装服务器启动的.Net环境
Download .NET Core 2.2 SDK (v2.2.207) - Windows x64 Installer

3.5 启动SimpleServer 和 游戏客户端


桌面的XXXX.exe和Unity编辑器同时启动,然后游戏就会开始:(只启动一个,会进入等待)

4. new Replay ClientMode and Debug (回放功能,客户端模式,Debug)
4.1 回放功能初始化

4.2 回放功能的Update更新

4.3 客户端模式初始化

4.4 客户端模式更新和输入

4.5 Debug

5. RollBackFramework 预测回滚
6.帧同步框架设计难点
6.1 多平台
Bridge桥接模式
理论做法: 使用桥接模式 + 抽象工厂

实际做法:

6.2 多实例
比如打守望先锋,阵亡之后,放回放,这个回放里的内容,要和现在的内容并行。要保证回放里面的指令操作不能污染现在的主内容的数据。这就要求帧同步系统支持多实例。
- 不要使用静态变量,除非是const,或者作为const使用的数据。
- 单例模式不要用,静态的static服务都不要用,只有const类型服务才能用。
6.3 View层处理Config
View与Entity的关系

因为要求客户端服务端都能读取同样的配置文件Config,例如攻击间隔什么的这种配置。(怎么感觉直接用excel生成json更好啊)

