Tick:游戏线程的第一开销

stat tick 打开你会看到一个分类账:角色Tick、动画 Tick、物理 Tick、粒子 Tick、各种组件 Tick……对多数项目,Tick 占游戏线程的一半以上。

Tick 的三档治理

档位 手段 说明
不需要 关闭 Tick 静态装饰、只受击的物件、纯数据 Actor
低频即可 改 Tick 间隔 0.1~0.5 秒一次(UI 刷新、巡逻判断)
必须每帧 保留,但优化函数体 让函数本身便宜

关闭 Tick 的对象清单:门 / 箱子 / 拾取物 / 灯具 / 静态 NPC / 大多数背景元素。它们用事件驱动(Overlap、交互输入)就够了。蓝图组件的 PrimaryComponentTick 可以在构造里 SetTickEnabled(false)。

Tick 间隔的正确用法

设置间隔时注意:

  • UE 的 Tick 间隔是"最小间隔",不是"精确间隔"——实际执行时间点取决于调度;
  • 不同 Actor 用不同的间隔值(0.1 / 0.2 / 0.33 / 0.5),错峰执行,避免同一帧所有低频 Tick 撞车;
  • 间隔化的逻辑对"瞬移式检测"要小心:0.5 秒检测一次意味着敌人可能"穿过"快速移动的玩家——检测用连续物理(Overlap 事件),决策用低频 Tick。

Tick 里的写法优化

反模式 改进
Tick 里 FindActor / GetAllActors 每帧搜索 缓存结果 / 用管理器注册
Tick 里复杂数学用蓝图节点串联 热点函数下沉 C++
Tick 里设置其他组件属性(引发级联) 批量更新 / 事件通知
Tick 里做字符串拼接 移到构造 / 状态变化时