Как наложить функцию на кнопку клавиатуры в unity?
я посмотрел в ютубе туториалы расскаживающие на счет того как наложить на кнопку клавиатуры функцию, использовав, то что увидел и написал этот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class lvl_control2 : MonoBehaviour
{
[SerializeField] GameObject tablichka2lvl;
[SerializeField] GameObject podtext12lvl;
[SerializeField] GameObject podtext22lvl;
[SerializeField] GameObject podtext32lvl;
[SerializeField] GameObject podtext42lvl;
void Start()
{
StartCoroutine(Podtextt2lvl());
}
void Update()
{
bool propusk = Input.GetKeyUp(KeyCode.Space);
if(propusk)
{
StopCoroutine(Podtextt2lvl());
podtext12lvl.SetActive(false);
podtext22lvl.SetActive(false);
podtext32lvl.SetActive(false);
podtext42lvl.SetActive(false);
tablichka2lvl.SetActive(false);
}
}
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);
}
все работает кроме функции пробела(Scape)
Дополнительно:
vitek22 Правила 3.8
Ответы:
Смотри у тебя где ты вызываешь 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); } } |
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); } }
- не работает, а почему я останавливаю не ту корутину если я обозначил одно и то же название корутины в остановке и старте?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы наложить функцию на кнопку клавиатуры в Unity, вам необходимо следовать нескольким шагам. Начнем с создания скрипта, который будет отслеживать нажатия клавиш.
1. Создайте новый скрипт в Unity и откройте его для редактирования. Присвойте скрипту имя, например, "KeyboardInput".
2. Внутри скрипта определите метод Update(), который будет вызываться каждый кадр. В этом методе вы будете проверять нажатия клавиш.
3. В методе Update() используйте следующий код для определения нажатий клавиш:
void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // Здесь вы можете вызвать нужную вам функцию или выполнить нужные действия } }
4. Вместо KeyCode.Space вы можете использовать любую другую клавишу из списка KeyCode (например, KeyCode.W для клавиши W).
5. Внутри блока условия вы можете вызвать любую функцию или выполнить нужные действия в зависимости от нажатой клавиши.
6. Не забудьте присоединить скрипт к объекту в вашей сцене, который будет отслеживать нажатия клавиш.
Теперь, когда вы нажмете на определенную клавишу, Unity будет вызывать нужную вам функцию или выполнять нужные действия. Не забывайте также учитывать другие аспекты игровой механики, такие как фокус на объекте или режимы игры.