Unity как получить ввод кнопки внутри скрипта C#? - PullRequest
0 голосов
/ 08 мая 2020

Я пишу игру, которая включает систему комбо (это сценарий). В настоящее время у меня есть так, что вводы являются ключами, но я хочу изменить его, чтобы вместо этого вводилось нажатие кнопки.

Вот код ввода:

void Update() {
         if (Input.GetKeyDown(KeyCode.E))
            input = new ComboInput(AttackType.heavy);
         if (Input.GetKeyDown(KeyCode.R))
            input = new ComboInput(AttackType.light);
}

Суть кнопок пользовательского интерфейса в том, что они принимают команду onPressed (), но я не могу создать функцию для ввода этого ввода, потому что она уже находится в функция обновления. Любая помощь будет оценена.

1 Ответ

1 голос
/ 08 мая 2020

Вы можете добавить делегата для кнопки, чтобы вызывать ее при нажатии.

Пример:

private void Awake()
{
    Button buttonComponent = GetComponent<Button>();
    buttonComponent.onClick.AddListener(OnButtonClicked)
}

private void OnButtonClicked()
{
    Debug.Log("The button has clicked!");
}

Вы должны прикрепить этот скрипт к своему игровому объекту Button.

Также вы можете добавить функцию события прямо к вашей кнопке напрямую через инспектор, но функция должна быть public, чтобы инспектор мог получить к ней доступ. Если вы не хотите, чтобы ваша функция была видна другим классам, то лучшим выбором будет приведенное выше.


В вашем случае вот мое предложение:

[SerializeField]
private Button buttonE, buttonR;

private ComboInput input;

private void Awake()
{
    buttonE.onClick.AddListener(OnButtonClicked_E);
    buttonR.onClick.AddListener(OnButtonClicked_R);
}

private void OnButtonClicked_E()
{
    input = new ComboInput(AttackType.heavy);
}

private void OnButtonClicked_R()
{
    input = new ComboInput(AttackType.light);
}

РЕДАКТИРОВАТЬ: если вы хотите отредактировать существующий боевой сценарий (а не создавать новый отдельный компонент), тогда вам нужно передать свои кнопки своему боевому сценарию. Это buttonE, buttonR, ссылку на который нужно передать через инспектор единства. Если это произошло, вы можете удалить свою функцию Update(), если с ней не связано никаких других вещей.

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