Установить текстовое значение текстового игрового объекта на определенную клавишу при его нажатии (Unity) - PullRequest
1 голос
/ 07 марта 2019

У меня есть две кнопки, и у каждой кнопки есть объект Text game, который является дочерним для него.Когда кнопка нажата, а затем нажата клавиша, я хочу обновить текст, отображаемый игровым объектом «Текст», который является дочерним по отношению к нажатой кнопке.Вот что я попробовал:

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 является глобальной переменной, поэтому я мог получить к ней доступ за пределами OnGUI, но все равно получаю эту ошибку.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Ваш changeFirstKey changeSecondKey - это правильный метод Button?Как удовлетворится, если

(keyboardEvent.isKey) ();Когда вы нажимаете кнопку?

Это один из способов реализации, к которому вы должны прикрепить этот скрипт к кнопкам.

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

                }
                }
            }
0 голосов
/ 07 марта 2019

Попробуйте одно из следующих:

  • Использование заглавных букв в KeyCode:

keyboardEvent.KeyCode.ToString()

  • Попробуйте отладить 'currentEvent', чтобы увидеть результат

    debug.log (currentEvent)

  • Прочтите это руководство по единству здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...