按下文本游戏对象的文本值时将其设置为某个键(统一)

时间:2019-03-07 18:14:31

标签: c# unity3d

我有两个按钮,每个按钮都有一个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之外访问它,但仍然会收到此错误。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

尝试以下方法之一:

  • 在KeyCode中使用大写字母:

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;
                    }

                }
                }
            }