学习ET6框架
游戏主循环(Game Loop)
电子游戏也属于一种程序,根据模型IPO(输入Input、处理Process、输出Output),我们简易总结出以下代码:
while (Game.IsRunning) {
// (处理——游戏物理)物理帧(如果有物理引擎的话)
//Game.UpdatePhysics();
// (输入)处理输入事件(键盘、滑鼠、手柄、触控屏 等等)
Game.ProcessInputs();
// (处理——游戏逻辑)逻辑帧
Game.UpdateLogic();
// (输出)渲染帧(表现帧:可能有除了屏幕以外的硬件需要处理输出事件,例如 游戏手柄的震动,或是街机特别的动效 等等)
Game.UpdateDisplay();
}
这里要注意到 物理帧 要在 处理输入事件 之前,使得 物理帧 永远早于 逻辑帧、渲染帧,避免输入变化后,后两种帧类追赶物理帧。
ET6实现Game Loop的代码
可以注意到ET框架的帧更新是根据这个EventSystem。
ET6客户端和服务端用同一种语言,并且共享代码
客户端服务端之间的网络消息两边完全共用一个文件即可,添加一个消息只需要修改一遍。
我们可以看到下图黄框处有一个小箭头,就是指Server.Model-MoveComponent LINKS Client.Model-MoveComponent。
下图是Server.Model.csproj内容对MoveComponent的Link描述。
网络游戏的状态帧同步
有了Game-Loop模型基础知识,我们可以直接将状态帧同步的处理填入到Game.UpdateLogic()的方法体当中。
ET6当中只负责数据转发,对游戏逻辑的数据同步,我们要根据自己的需求去实现。
每秒多少帧数?
就以 程序 呈现自己的 游戏故事 与 美术 而言,一开始先不去深入研究,大胆用 { 帧同步20帧、表现帧60帧 } / 每秒。
简单理解冯诺依曼计算机模型
模型 IPO(输入、处理、输出)学习模型
支持游戏运行的的支柱——游戏循环
一个典型的游戏循环是怎样的流程?
游戏主循环(Game Loop)
Order of execution for event functions(in Unity)
Execution order of events: Why are inputs processed after physics?
lordofduct: Inputs are usually processed during your Update pass, which yes, Update comes after the physics simulation. And I could see a few reasons you might want to process logic after the physics has simulated, so that you can adjust the scene relative to the physics before things get rendered. Otherwise, physics will always be a frame ahead of logic, and logic is constantly playing catch-up, and you’d see this catch-up as jitter if the logic re-adjusts anything after physics moved it.
逻辑帧和渲染帧
游戏开发基础笔记:逻辑帧和物理帧辨析 | Gameloop | 游戏循环
Unity中的FixedUpdate、Update、LateUpdate的区别及游戏帧更新
https://blog.csdn.net/enternalstar/article/details/108507205
三者执行顺序:FixedUpdate ——>Update ——>LateUpdate
三者作用:FixedUpdate固定帧更新,一般用作物理更新;Update一般用作游戏逻辑更新;LateUpdate一般用作相机更新
EventSystem笔记(一)
服务器命名以及消息类的端到端的命名方式
"Add as Link" for folders in Visual Studio projects
三种同步方式:状态同步、帧同步、状态帧同步
学习笔记15:网络游戏架构
如何理解游戏引擎中的逻辑帧?
一般帧同步游戏的逻辑帧采用多少?比如皇室战争、lol、王者荣耀。?
帧同步总结
Unity3D简单的帧同步方案
从ET6学C井
一段来自一个线程的代码到另一个线程执行,配合线程安全同步队列ConcurrentQueue<Action> queue。
搞懂 SynchronizationContext(第一部分)【翻译】
https://www.cnblogs.com/lzxianren/p/SynchronizationContext.html
封装一段来自一个线程的代码到另一个线程执行
C# AttributeUsage的使用浅析
其实AttributeUsage类就是描述了一个定制特性如和被使用。