博客网站建设基本流程,微信分享 淘宝网站 怎么做,互联网提供的服务主要有哪些,重庆网站建设公司销售Unity 的游戏循环机制在 Unity 中#xff0c;游戏的运行是基于帧的。每一帧都遵循固定的执行顺序#xff1a;处理输入执行游戏逻辑 (包括 Update、FixedUpdate 和协程)渲染场景显示帧为什么 GameTime.time 在同一帧内不变GameTime.time 是只读属性#xff1a;它返回的是当前…Unity 的游戏循环机制
在 Unity 中游戏的运行是基于帧的。每一帧都遵循固定的执行顺序处理输入执行游戏逻辑 (包括 Update、FixedUpdate 和协程)渲染场景显示帧
为什么 GameTime.time 在同一帧内不变
GameTime.time 是只读属性它返回的是当前帧开始时刻的时间戳在同一帧的所有代码执行过程中这个值保持不变只有在下一帧开始时Unity 引擎才会更新这个值代码执行与时间推进的关系您的代码是在一帧内的「执行游戏逻辑」阶段运行的在这一阶段时间还没有「推进」GameTime.time 保持固定只有当这一帧完全结束进入下一帧时时间才会更新
举例说明Bug
while (GameTime.time - begin 0.03f) // 条件永远为 true
{var lerp (GameTime.time - begin) / 0.03f; // 永远是 0/0.03 0yMouse Mathf.Lerp(_y_mouse, cameraConfig.y_mouse, lerp); // 永远是起始值distanceFromTarget Mathf.Lerp(...); // 同上// 没有 yield return循环继续立即执行下一轮// GameTime.time 仍然是 10.0因为还在同一帧
}在第一轮计算GameTime.time - begin 0 ≤ 0.03 → 继续在第二轮计算GameTime.time - begin 0 ≤ 0.03 → 继续在第三轮计算GameTime.time - begin 0 ≤ 0.03 → 继续...无限循环因为 GameTime.time 不会改变为什么这一帧始终无法进入下一帧 1、首先我们要知道——Unity是帧更新机制包括GameTime.time 2、又因为GameTime.Time需要下一帧进行更新但GameTime.Time又作为循环条件这一帧的内容始终在While循环中
使用协程方法yield return new WaitForEndOfFrame的原因
为什么 yield return 能解决这个问题yield return new WaitForEndOfFrame() 的作用是暂停当前协程的执行允许当前帧完成完成渲染等所有操作在下一帧继续执行协程此时 GameTime.time 已经更新为下一帧开始的时间所以有了 yield return第1帧执行一次循环然后暂停第2帧GameTime.time 已更新再次执行循环第3帧GameTime.time 再次更新可能已经超过 0.03 秒循环结束
之后的话题如何理解一帧的内容
这一帧的内容为什么是while循环还有其他代码属于这一帧的内容吗如何判断哪些代码属于一个帧内的如何判断哪些代码属于同一个帧有一个非常简单的判断原则所有在同一个“游戏逻辑处理阶段”被连续调用的代码都属于同一帧。更具体地说在Unity的主循环中一帧内按顺序会发生很多事下图清晰地展示了这一流程以及您的代码是如何被嵌入执行的