逻辑帧和渲染帧

文档:游戏开发基础笔记:逻辑帧和物理帧辨析 | Gameloop | 游戏循环 – 源码巴士 (code84.com)

逻辑帧是每秒进行物体对象状态更新的计算次数,他决定了世界时间的额运行推进(开发者自定义的逻辑更新时间)

渲染帧是显卡渲染pipeline进行渲染的帧数(unity中就是调用Update())

逻辑帧和渲染帧不一定是重合的,如果渲染帧比逻辑帧慢(渲染太复杂卡了),逻辑帧比渲染帧慢(cpu算数据卡了,一般不会)。
如果出现渲染帧比逻辑帧慢的情况,需要进行补帧,具体操作:

记录更新逻辑帧的时间(lastUpdateTime),每次更新逻辑帧的时候更新这个时间,在Update(也就是渲染帧)中检查两次逻辑帧相差时间是否高于设定的逻辑帧间隔(fixedDeltaTime),高于则补帧(渲染帧比逻辑帧慢),低于就不用管(逻辑帧比渲染帧慢)。

c#实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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();
                }
            }
            
        }

  

posted @   mc宇少  阅读(1444)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示