Sim*_*mon 2 performance unity-game-engine
为什么Unity会对所有Input事件使用轮询,如果有新事件,检查每个更新循环是否效率很低?如果每个更新周期我有1个mio对象,我会假设常量轮询会显着减慢系统速度.
public void Update() {
if (Input.GetKeyUp(KeyCode.Escape)) {
// escape clicked
}
}
Run Code Online (Sandbox Code Playgroud)
为什么没有这样的:
public void Start() {
Input.addKeyUpListener(KeyCode.Escape, delegate {
// escape clicked
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,Unity 每次调用其中一种方法时都不会轮询系统 - 而是每帧轮询一次,然后缓存该值,如ResetInputAxes
函数所示.
这不是Unity做出看似疯狂的事情的唯一地方,但在较低级别的代码中可能更有效 - 请记住,Unity对运行时(特别是垃圾收集和构造)保持了很多自定义,其工作方式不同于标准C#.
另请注意,回调逻辑虽然适用于处理程序以及通常长寿命的对象(如单例和系统),但对于通常在游戏生命周期中多次收集和创建的脚本而言并不是那么好.由于Unity只暴露了使用代码创建脚本的能力,因此轮询更有意义,而不是使用需要附加,处理和分离行为以避免错误的回调.
归档时间: |
|
查看次数: |
265 次 |
最近记录: |