Как связать функцию с нажатием определенной клавиши на клавиатуре в Unity?

Как можно улучшить функциональность кода для кнопки "пробел" (Space)?
  • 16 марта 2024 г. 7:19
Ответы на вопрос 2
1. Для связывания функции с нажатием определенной клавиши на клавиатуре в Unity можно использовать метод Input.GetKey(KeyCode key).
Например, чтобы вызвать функцию при нажатии клавиши "Пробел", можно добавить следующий код в метод Update():

```csharp
void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        YourFunction();
    }
}
```

2. Чтобы улучшить функциональность кода для кнопки "пробел" (Space), можно добавить дополнительные проверки или действия. Например:
- Добавить проверку на возможность выполнения функции (например, если персонаж находится на земле или в прыжке).
- Сделать так, чтобы при удерживании клавиши "Пробел" персонаж продолжал прыгать или выполнять какое-либо действие.
- Изменить не только действие при нажатии клавиши "Пробел", но и добавить альтернативные действия при удержании клавиши или при отпускании.
- Добавить анимацию или звуковой эффект при нажатии клавиши "Пробел".
Смотри у тебя где ты вызываешь StopCoroutine не срабатывает, потому что ты пытаешься остановить другую корутину, а не ту что ты запустил на старте. 

Тебе надо на старте сохранить её в поле и потом её и отсанваливать. Вот так :
using System.Collections;
using UnityEngine;

public class lvl_control2 : MonoBehaviour
{
    [SerializeField] private GameObject tablichka2lvl;
    [SerializeField] private GameObject podtext12lvl;
    [SerializeField] private GameObject podtext22lvl;
    [SerializeField] private GameObject podtext32lvl;
    [SerializeField] private GameObject podtext42lvl;
    private Coroutine _podTextCoroutine;

    private void Start()
    {
        _podTextCoroutine = StartCoroutine(Podtextt2lvl());
    }

    private void Update()
    {
        bool propusk = Input.GetKeyUp(KeyCode.Space);

        if (propusk)
        {
            StopCoroutine(_podTextCoroutine);

            podtext12lvl.SetActive(false);
            podtext22lvl.SetActive(false);
            podtext32lvl.SetActive(false);
            podtext42lvl.SetActive(false);
            tablichka2lvl.SetActive(false);
        }
    }

    private IEnumerator Podtextt2lvl()
    {
        tablichka2lvl.SetActive(true);
        podtext12lvl.SetActive(true);
        podtext22lvl.SetActive(true);
        podtext32lvl.SetActive(false);
        podtext42lvl.SetActive(false);
        yield return new WaitForSeconds(8f);
        podtext12lvl.SetActive(false);
        podtext22lvl.SetActive(false);
        podtext32lvl.SetActive(true);
        yield return new WaitForSeconds(8f);
        podtext32lvl.SetActive(false);
        podtext42lvl.SetActive(true);
    }
}using System.Collections;
using UnityEngine;

public class lvl_control2 : MonoBehaviour
{
    [SerializeField] private GameObject tablichka2lvl;
    [SerializeField] private GameObject podtext12lvl;
    [SerializeField] private GameObject podtext22lvl;
    [SerializeField] private GameObject podtext32lvl;
    [SerializeField] private GameObject podtext42lvl;
    private Coroutine _podTextCoroutine;

    private void Start()
    {
        _podTextCoroutine = StartCoroutine(Podtextt2lvl());
    }

    private void Update()
    {
        bool propusk = Input.GetKeyUp(KeyCode.Space);

        if (propusk)
        {
            StopCoroutine(_podTextCoroutine);

            podtext12lvl.SetActive(false);
            podtext22lvl.SetActive(false);
            podtext32lvl.SetActive(false);
            podtext42lvl.SetActive(false);
            tablichka2lvl.SetActive(false);
        }
    }

    private IEnumerator Podtextt2lvl()
    {
        tablichka2lvl.SetActive(true);
        podtext12lvl.SetActive(true);
        podtext22lvl.SetActive(true);
        podtext32lvl.SetActive(false);
        podtext42lvl.SetActive(false);
        yield return new WaitForSeconds(8f);
        podtext12lvl.SetActive(false);
        podtext22lvl.SetActive(false);
        podtext32lvl.SetActive(true);
        yield return new WaitForSeconds(8f);
        podtext32lvl.SetActive(false);
        podtext42lvl.SetActive(true);
    }
}
Похожие вопросы