【发布时间】:2017-09-03 12:21:42
【问题描述】:
我正在使用 C# 学习 Unity 并学习 GUI 按钮。我在 Unity 文档中找到了以下语句:
“这意味着您的 OnGUI 实现可能每帧调用多次(每个事件调用一次)。”
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 语句在条件为 false 时什么都不做,但与事件驱动输入相比,它一直在检测并且效率不高。
2) 为什么 Unity 在这种情况下使用轮询输入?
3) 上述声明提到“每个事件一次调用”。这是否意味着它实际上是事件驱动输入,而不是轮询输入?
我对这些问题感到困惑,找不到答案。有人可以给我解释一下。谢谢。
【问题讨论】:
-
您不应该使用 OnGUI 系统进行游戏开发。请参阅Immediate Mode GUI (IMGUI) 的帮助页面 “IMGUI 系统通常不适用于玩家可能使用和与之交互的普通游戏内用户界面。为此,您应该使用 Unity 的主要基于 GameObject 的UI system ,它提供了一种基于 GameObject 的方法来编辑和定位 UI 元素,并且具有更好的工具来处理 UI 的视觉设计和布局。”
标签: c# button unity3d polling event-driven-design