Unity GUI 按钮 - 轮询输入与事件驱动输入
Unity GUI Button - Polling Input VS Event Driven Input
我正在用 C# 学习 Unity 并研究 GUI 按钮。我在 Unity 文档中找到了以下语句:
"This means that your OnGUI implementation might be called several times per frame (one call per event). "
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnGUI() {
if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button"))
print("You clicked the button!");
}
}
我的问题是:
1) 上面的"if"语句会一直检测条件,直到条件为真。它应该被称为轮询输入。为什么上面的代码使用轮询输入而不是事件驱动输入? (即当有人按下按钮时,事件被触发。)。虽然if语句在条件为假时什么都不做,但是它一直在检测,与事件驱动输入相比效率不高。
2)为什么Unity在这种情况下使用轮询输入?
3) 上面的语句提到了"one call per event"。这是否意味着它实际上是一个事件驱动输入,而不是轮询输入?
我对这些问题很困惑,找不到答案。有人会向我解释。谢谢
1。如果你按下按钮 GUI.Button
returns true
。如果未按下按钮,GUI.Button
将 return false
。就这么简单。那不是一个事件。它只是一个 return 真或假的函数,取决于是否按下按钮。
2。我的猜测是 Unity 想通过这样做让事情变得更简单。基本上,您只需创建一个 Button 并检查它是否被按下,只需一行代码。
3
Does it mean it is actually a event driven input, not polling input?
它仍然是Polling,但它只在点击时被调用一次,直到被释放。要调用GUI.Button
,必须在OnGUI
函数中不断调用GUI.Button
。
暂时忘掉GUI.Button
。你现在使用的是IMGUI。
你不需要它。有一个新的UI系统(uGUI)。这是你应该使用的,一切都基于事件。 Here 是新 UI 系统的教程。忽略任何需要使用 OnGUI
函数的内容。
下面是注册和注销按钮 onClick
事件的简单方法。
public Button button;
注册按钮事件
button.onClick.AddListener(() => yourCallBackFunction);
注销按钮事件
button.onClick.RemoveAllListeners();
您可以找到其他 UI 事件示例 。
我正在用 C# 学习 Unity 并研究 GUI 按钮。我在 Unity 文档中找到了以下语句:
"This means that your OnGUI implementation might be called several times per frame (one call per event). "
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnGUI() {
if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button"))
print("You clicked the button!");
}
}
我的问题是:
1) 上面的"if"语句会一直检测条件,直到条件为真。它应该被称为轮询输入。为什么上面的代码使用轮询输入而不是事件驱动输入? (即当有人按下按钮时,事件被触发。)。虽然if语句在条件为假时什么都不做,但是它一直在检测,与事件驱动输入相比效率不高。
2)为什么Unity在这种情况下使用轮询输入?
3) 上面的语句提到了"one call per event"。这是否意味着它实际上是一个事件驱动输入,而不是轮询输入?
我对这些问题很困惑,找不到答案。有人会向我解释。谢谢
1。如果你按下按钮 GUI.Button
returns true
。如果未按下按钮,GUI.Button
将 return false
。就这么简单。那不是一个事件。它只是一个 return 真或假的函数,取决于是否按下按钮。
2。我的猜测是 Unity 想通过这样做让事情变得更简单。基本上,您只需创建一个 Button 并检查它是否被按下,只需一行代码。
3
Does it mean it is actually a event driven input, not polling input?
它仍然是Polling,但它只在点击时被调用一次,直到被释放。要调用GUI.Button
,必须在OnGUI
函数中不断调用GUI.Button
。
暂时忘掉GUI.Button
。你现在使用的是IMGUI。
你不需要它。有一个新的UI系统(uGUI)。这是你应该使用的,一切都基于事件。 Here 是新 UI 系统的教程。忽略任何需要使用 OnGUI
函数的内容。
下面是注册和注销按钮 onClick
事件的简单方法。
public Button button;
注册按钮事件
button.onClick.AddListener(() => yourCallBackFunction);
注销按钮事件
button.onClick.RemoveAllListeners();
您可以找到其他 UI 事件示例