逻辑帧和渲染帧

发布时间 2023-12-04 17:04:16作者: mc宇少

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