前言
在学习帧同步框架源码之前,先过一遍基础知识: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更好啊)