逻辑帧和渲染帧
文档:游戏开发基础笔记:逻辑帧和物理帧辨析 | Gameloop | 游戏循环 – 源码巴士 (code84.com)
逻辑帧是每秒进行物体对象状态更新的计算次数,他决定了世界时间的额运行推进(开发者自定义的逻辑更新时间)
渲染帧是显卡渲染pipeline进行渲染的帧数(unity中就是调用Update())
逻辑帧和渲染帧不一定是重合的,如果渲染帧比逻辑帧慢(渲染太复杂卡了),逻辑帧比渲染帧慢(cpu算数据卡了,一般不会)。
如果出现渲染帧比逻辑帧慢的情况,需要进行补帧,具体操作:
记录更新逻辑帧的时间(lastUpdateTime),每次更新逻辑帧的时候更新这个时间,在Update(也就是渲染帧)中检查两次逻辑帧相差时间是否高于设定的逻辑帧间隔(fixedDeltaTime),高于则补帧(渲染帧比逻辑帧慢),低于就不用管(逻辑帧比渲染帧慢)。
c#实现:
void Update()
{
// 计算此帧距离上一帧经过的时间
//如果当前时间暂停,不再更新
if (IsGamePause())
return;
//渲染帧事件
if (UpdateEvent != null)
{
UpdateEvent.Invoke();
}
int frameCount = 0;
int count = 0;
while (Time.time - lastUpdateTime > fixedDeltaTime)
{
lastUpdateTime += fixedDeltaTime;
//maxFrameInSingleUpdate:两个渲染帧之间最多补几帧
if (frameCount >= maxFrameInSingleUpdate)
{
continue;
}
frameCount++;
//游戏内计时器,更新当前帧率
Timer();
//逻辑帧事件
if (MainLoopEvent != null)
{
MainLoopEvent.Invoke();
}
}
}

浙公网安备 33010602011771号