全站通知:

游戏环路

阅读

    

2023-07-25更新

    

最新编辑:晨1999

阅读:

  

更新日期:2023-07-25

  

最新编辑:晨1999

来自S&boxWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
晨1999

每刻(Tick)

Simulate

参考:

每个Tick (默认60次一秒), 客户端会向服务器发送一个命令(Command)。这个命令会被 simulated。这意味着它从命令获取输入(例如,新的视角)并将其应用到棋子上(列如,将朝向对齐视角)。

在它被发送到服务器的同时,客户端本地也会运行相同的命令。这被称作预测。这允许像移动,射击和跳跃这样的输入感觉上是即时的,没有延迟。

在客户端运行命令后,它会存储所有已更改的实体变量,当该tick的结果从服务器返回时,它对它们进行比较。如果它们不一样,则表示发生了预测错误。

每帧(Frame)

这些东西在客户端每帧都被调用。

BuildInput

参考:

每帧我们都会构建输入。这将把来自鼠标、键盘和控制器的输入转换成命令,并在下一个 tick 时发送到服务器。

在 BuildInput 中,您可以使用Input函数来操作输入 - 例如使用 Input.ClearActions() 来清除动作,以及为标有 [ClientInput] 的属性赋值。

这是通过将 InputBuilder 类传递给游戏模式 - 然后将其传递给当前的摄像机和棋子。这些回调通常用于将鼠标移动转换为视角等操作。

您可以通过在游戏类中重写 BuildInput函数来覆盖所有这些行为。

拟帧(Frame Simulate)

参考:

由于Simulate只在每一刻(默认情况下为 60fps)发生一次,而玩家的显示器可能会显示远高于此的帧率,客户端在视线方向等方面会感觉非常不流畅。为了解决这种不匹配的问题,FrameSimulate 会在客户端的每一帧都被调用,让游戏有机会平滑任何可能出现的卡顿或不流畅。

这通常用于根据视线方向更新内容(例如 Pawn.AimRay)。

重要的是要意识到这只是客户端的设置,因此如果您在这里设置了什么,就需要在 Simulate中更新。如果您无法注释掉 FrameSimulate 代码并使游戏正常运行,那么您就做错了。

事件(Events)

您还可以让您的游戏代码在诸如 tick 等事件(event)发生时触发,这样您就可以在服务器端独立于客户端运行逻辑。