逻辑帧和渲染帧
文档:游戏开发基础笔记:逻辑帧和物理帧辨析 | 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(); } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了