作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么Unity对所有输入事件都使用轮询,检查每个更新循环是否有新事件,效率不是很低吗?如果我有 1 个 mio 对象在每个更新周期执行此操作,我会假设持续轮询会显着减慢系统速度..
public void Update() {
if (Input.GetKeyUp(KeyCode.Escape)) {
// escape clicked
}
}
为什么没有这样的事情:
public void Start() {
Input.addKeyUpListener(KeyCode.Escape, delegate {
// escape clicked
});
}
最佳答案
请注意,每次调用这些方法之一时,Unity 不会轮询系统 - 它会每帧轮询一次,然后缓存该值,如下所示ResetInputAxes
功能。
这并不是 Unity 做一些看似疯狂的事情的唯一地方,但在较低级别的代码中可能会更有效 - 请记住,Unity 维护了对运行时的大量自定义(特别是垃圾收集和构造),工作方式与标准 C# 不同。
另请注意,回调逻辑虽然对于处理程序和通常长期存在的对象(例如单例和系统)来说非常有用,但对于通常在游戏的整个生命周期中多次收集和创建的脚本来说并不是那么好。由于 Unity 只公开了用代码编写脚本的能力,因此轮询比使用回调更有意义,回调需要附加、处理和分离行为来防止错误。
关于performance - Unity3D Input.GetKeyUp() 轮询效率低下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185129/
我是一名优秀的程序员,十分优秀!