文档:游戏开发基础笔记:逻辑帧和物理帧辨析 | 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(); } } }