[UE4]游戏主循环
游戏的运行模型
理解游戏的运行模型,对处理很多游戏错误有非常大的帮助。
游戏是有一个主循环的。那么游戏主循环做了什么事情呢?
游戏主循环一次就表示一帧,游戏主循环包括:接受输入、处理游戏逻辑、渲染、Sleep。
帧的英文是Frame,帧率英文是Frame Per Second(简称FPS)。
一般游戏的帧率是60FPS,也就是一秒渲染60帧。60帧的情况下,游戏会非常流畅,不会感觉到卡顿。
60FPS的游戏中,一帧是1/60=0.0166666666666667秒,大约是17毫秒。
电影的帧率是24帧,电影比游戏慢多了,为什么电影是24帧呢,这个是有历史原因的,早期的电影是使用胶卷制作的,帧数越多使用的胶卷越高,成本也就越高。
如果电影中晃动镜头特别多的时候,就会感觉画面糊成一片,看得很不清晰。为什么游戏的帧率普遍要求要比电影高呢?这是因为游戏是有操作的,尤其是动作游戏,玩家每操作一次都要在画面上体现出来,如果帧率过低,就感觉到有延迟。
Sleep的作用
主循环的最后一步的Sleep的作用是稳定帧率。在60FPS的游戏中,一帧是17毫秒:
一、如果游戏主循环的前三个步骤(接受输入、处理游戏逻辑、渲染)的执行时间小于17毫秒,假设8毫秒就完成了前三个步骤,那么就Sleep等待9毫秒;如果不进行Sleep,游戏的速度就会加快。
二、如果游戏主循环的前三个步骤执行时间超过了17毫秒,比如30毫秒才完成前三个步骤,最后一个步骤Sleep就不会被执行,玩家就会感觉到画面卡了一下。
如果知道游戏的帧率
有一个选项在开发游戏的时候很重要,一定要打开并一直关注。
如图所示:37.42FPS表示帧率是37.42,26.72MS表示运行一帧要26.72毫秒。
在游戏开发过程中,应该一直关注FPS,如果发现FPS突然掉了,就能大概知道是什么地方出了问题。
理解游戏主循环模型,就能理解很多游戏错误是怎么产生的。