游戏循环:游戏引擎心跳机制与时间步长实现 📅 2026/8/27 2:30:23 开场凌晨两点,QA 群里丢来一段录屏:角色在低帧率机器上移动时会"瞬移"穿墙,物理交互完全失准。我盯着屏幕反复看了三遍,确认逻辑没问题——可一旦帧时间拉到 33ms 以上,子弹轨迹就开始飘,碰撞盒也跟着错位。这种"机器越好越正常、机器越差越离谱"的 bug,几乎都出在一个地方:游戏循环(Game Loop)的时间步长处理。无论是 Unity 自带的 PlayerLoop、还是自研引擎手写的 while 循环,dt 的传参方式直接决定了物理、AI、动画的稳定性。下面我们就从机制到工程,把这块彻底拆开。一、核心概念:什么是 Game Loop1.1 单帧的四步流水线任何游戏引擎的主循环,归根结底都在反复执行下面四件事:处理输入:采集键鼠、手柄、网络指令,转换成事件队列;更新逻辑 / 物理:跑脚本、AI、动画状态机、物理积分;渲染:把场景数据提交给 GPU;其他系统:音频、GC、资源回收、Profiler 采样。这四步缺一不可,循环不停游戏就"活着",一旦停了——轻则卡顿,重则直接退出。1.2 最简 C# 实现:固定步长 + 累加器下面是一段最朴素但结构正确的引擎主循环骨架,工业界称之为 "Fix Your Timestep" 模式(Gaffer on Games 那篇名文讲的就是它):