时间

概念说明

逻辑帧

逻辑帧是每秒进行物体对象状态更新的计算次数,它随游戏时间的推进运行。

逻辑帧更新间隔(DeltaTime)是指每帧逻辑帧更新时消耗的时长,单位为毫秒。在服务器上,这个值一般是33ms(每秒30帧),如果开启了低帧率模式,这个值会增大到66ms(每秒15帧);在客户端上,这个值取决于运行游戏的设备性能和该帧内运行逻辑的复杂程度,对于不同性能的设备,逻辑帧更新会以每秒30、45、60、90帧等基准速率进行,然而这不是稳定的,实际运行时会根据当帧计算量产生一定波动。

image-20241031162541260

服务器低帧率模式设置

在每个逻辑帧成功更新后,会尝试执行逻辑帧更新事件(OnUpdate)下的逻辑,并开始下一逻辑帧的更新。

您可以在全局属性中找到逻辑帧更新间隔属性,您可以通过这个属性获知上一逻辑帧消耗的时间。如上文所说,在服务器脚本上获取该属性,根据服务器低帧率模式是否开启,将总是返回66或33;在客户端脚本上获取该属性,您会得到上一逻辑帧更新消耗的时间。

image-20241031160820759

固定帧

固定帧以真实时间的固定间隔进行更新。

固定帧更新间隔(FixedDeltaTime)是指每个固定帧设定好的时间长度,单位为毫秒。在Craftland Studio PC中,无论是在客户端还是在服务器上,固定帧始终以每秒30次的速度更新,即固定帧更新间隔为33ms。

在每个固定帧成功更新后,会尝试执行固定帧更新事件(OnFixedUpdate)下的逻辑,并开始下一固定帧的更新。

您可以在全局属性中找到固定帧更新间隔属性。如上文所说,无论在客户端还是服务器脚本中取得该属性,它的值总是33。

image-20241223181242317

游戏时间

在全局属性中,您可以找到游戏时间属性。

image-20241223181134697

它代表了游戏从开始的真实时间长度,在每个固定帧更新后,该时间都会增加33。

客户端和服务器的游戏开始时间会有一点差别,所以客户端的游戏时间属性值通常比服务器的要小一些。

累计运行帧

在全局属性中,您可以找到累计运行帧属性,它记录了在当前平台(服务器或客户端)上总计更新过的逻辑帧数量。

image-20241223185132371

补充说明

逻辑帧更新频率、固定帧更新频率、游戏时间、累计运行帧属性均为区分客户端与服务器的属性。在双端上这些属性都是独立存在的,尽管有些属性的值可能相同,如固定帧更新频率。

使用时间模组

帧更新事件

对于逻辑帧和固定帧,可以分别通过对应事件在其更新时触发逻辑。

image-20241031163319163

在客户端中,对于物理运动,将其放在固定帧更新事件下是更好的选择,否则在逻辑帧更新速度出现波动时,物体的运动可能会出现不稳定的情况。

image-20241031165758933

以每秒30次的更新频率来看,物体的运动也会出现卡顿的表现,更平滑的运动请使用Playable模组

在服务器15帧模式下,服务器脚本中固定帧更新事件会在每次逻辑帧更新前运行两次。

image-20241031165917235

image-20241031170114112

而客户端不受这个设置影响,仍然按照当前设备渲染速率更新。

image-20241031183152529

image-20241031183233372

暂停固定帧更新

使用暂停固定帧更新图元,只会停止对应平台固定帧更新事件触发。
暂停固定帧更新不会影响其他时间模组相关内容,游戏时间仍会正常累计,逻辑帧更新也不受影响。

image-20241031172523455

使用恢复固定帧更新图元,就可以重新开始触发固定帧更新事件。

image-20241031172549272

这两个API在调用后会分别触发游戏暂停、游戏恢复事件

image-20241104112751825