ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Unity主线程卡死:FixedUpdate一分钟,引擎为何不救?

Unity主线程卡死:FixedUpdate一分钟,引擎为何不救? 前几天带新人,他问了我一个问题,我觉得挺值得写下来。他说:Unity 里 Update 和 FixedUpdate 是两个方法嘛,那如果我在 FixedUpdate 里写了个特别耗时的东西,比如卡了一分钟,Update 是不是就没法执行了?引擎会不会有什么机制救一下?我当时的第一反应是:会卡死,引擎救不了。但他追问为什么,我发现要讲清楚,得把 Unity 主循环的一些底层假设摊开来说。正好写篇东西。先破除一个错觉新人之所以会问"Update 是不是就没法执行了",背后藏着一个很自然但错误的想法——他潜意识里觉得 Update 和 FixedUpdate 是两条并行的线,各跑各的,一个堵住了另一个还能动。不是这样的。Unity 里所有这些生命周期方法——Update、FixedUpdate、LateUpdate,还有渲染——统统跑在同一个主线程上,一个接一个排队执行。你可以把整个游戏想象成一个巨大的 while 循环,每一圈循环里,引擎按固定顺序把这些方法挨个调一遍:while (游戏还开着) { 处理系统消息和输入; while (攒够的时间 = 0.02f) // 物理步长默认 0.02 秒 { FixedUpdate(); 攒够的时间 -= 0.02f; } Update(); LateUpdate(); 渲染这一帧; }看清楚了吗?FixedUpdate 只是这个循环里的一次普通函数调用。主线程调它,然后傻等它返回,
返回列表