我有两个按钮,每个按钮都有一个Text游戏对象,该对象是它的子级。当按下一个按钮,然后再按下一个键时,我想将作为子项的Text游戏对象显示的文本更新为所按下的按钮。这是我尝试过的:
void OnGUI()
{
Event currentEvent = Event.current;
if (currentEvent.isKey)
{
if (currentEvent.keyCode.ToString() != "None")
{
keyboardEvent = currentEvent;
key = keyboardEvent.keyCode.ToString();
}
}
}
public void changeFirstKey()
{
if (keyboardEvent.isKey)
{
firstKeyText.text = key;
}
}
public void changeSecondKey()
{
if (keyboardEvent.isKey)
{
secondKeyText.text = key;
}
}
第一个按钮称为firstKey
,第二个按钮称为secondKey
。我确保单击firstKey
时会调用changeFirstKey
,反之亦然。但是,显示的文本不会改变。每次我尝试单击其中一个按钮时,都会在控制台中引发错误,问题是secondKey
未设置为对象的实例。我确保keyboardEvent
是全局变量,因此我可以在keyboardEvent
之外访问它,但仍然会收到此错误。我在做什么错了?
答案 0 :(得分:0)
尝试以下方法之一:
keyboardEvent.KeyCode.ToString()
尝试调试“ currentEvent”以查看结果
Debug.Log(currentEvent)
阅读统一手册here的帖子
答案 1 :(得分:0)
您的changeFirstKey changeSecondKey是Button方法吗?
(keyboardEvent.isKey)();当您按下按钮?
这是将脚本附加到Buttons的一种实现方式。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class MyTestClass : MonoBehaviour,IPointerExitHandler,IPointerDownHandler
{
bool _isFirstButtonPressed = false;
bool _isSecondButtonPressed = false;
Event keyboardEvent = new Event();
public Text firstKeyText;
public Text secondKeyText;
private string key;
public Button _button;
public void OnPointerDown(PointerEventData eventData)
{
if (eventData.selectedObject.name == "FirstButton")
{
_isFirstButtonPressed = true;
}
if (this.gameObject.name == "SecondButton")
{
_isSecondButtonPressed = true;
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (this.gameObject.name == "FirstButton")
{
_isFirstButtonPressed = false;
}
if (this.gameObject.name == "SecondButton")
{
_isSecondButtonPressed = false;
}
}
void OnGUI()
{
Event currentEvent = Event.current;
if (currentEvent.isKey)
{
if (currentEvent.keyCode.ToString() != "None")
{
keyboardEvent = currentEvent;
key = keyboardEvent.keyCode.ToString();
if (_isFirstButtonPressed) {
firstKeyText.text = key;
}
if (_isSecondButtonPressed)
{
secondKeyText.text = key;
}
}
}
}