Проблема с элементами управления Keyboard в выпуске - не возникает в редакторе Unity - PullRequest
0 голосов
/ 07 марта 2019

Я делаю игру, в которой требуется, чтобы вы нажали клавишу Enter, чтобы начать игру, я настроил ее так, чтобы при обнаружении объекта главного меню для bool было установлено значение true, что позволяет запускать игру по нажатию клавиши ввода (удалив игровой объект меню)

  bool menushow = false;
  void Update () {

  if(GameObject.Find("Menu1 1(Clone)") | GameObject.Find("Menu1 1 (1)"))
    {
        menushow = true;
    }

    if (Input.GetKeyDown(KeyCode.Return))
    {
        if (menushow)
        {

            Destroy(menu1);
            GlobalVars.G_INGAME = true;
            GlobalVars.G_START = true;
        }
    }

У меня также есть некоторый код, который приостанавливает игру и открывает menu1, когда пользователь нажимает escape.

    if(Input.GetKeyDown("escape") && GlobalVars.G_START == true)
    {
        Instantiate(Menu_1, new Vector3(0, 0, -8), Quaternion.identity);
        if(GameObject.Find("Menu1 1(Clone)"))
        {
            GlobalVars.G_START = false;
        }                    
    }

G_START означает состояние паузы / игры в игре, а G_INGAME означает, что пользователь находится в середине игры или закончил ее (например, умер или только что загрузился)

МОЯ ДИЛЕММА ЕСТЬ: Когда я экспортирую игру и запускаю exe, после нажатия Enter, чтобы запустить игру, она начинается, однако я больше не могу нажать клавишу escape, чтобы снова вызвать меню. Это не происходит в редакторе Unity, однако, где я могу спам войти и выйти, и меню появится и будет полностью уничтожен.

Буду признателен за понимание этого вопроса, поскольку я не уверен, как действовать, если столкнулся с проблемой, которая не возникает в редакторе единства, который я поэтому не могу отладить.

Спасибо за ваше время.

1 Ответ

1 голос
/ 07 марта 2019

Это не то, как вы должны реализовать свое меню в Unity.Создание и уничтожение игровых объектов требует значительных ресурсов процессора, и становится трудно отслеживать, когда вы делаете это в повторяющемся меню или объекте, особенно при расширении вашего проекта.

Вместо этого используйте один игровой объект главного меню с именем«Главное меню Canvas» и прикрепите к нему свой холст, затем прикрепите следующий скрипт:

...   // Standard Unity Namespaces can go here .  
using UnityEngine.UI;

public class MainMenuController : MonoBehaviour
{

private Canvas mainMenuCanvas;
private bool showMenu; // Set this to true if it should be implemented at game open

void Awake(){
  mainMenuCanvas = gameObject.GetComponent<Canvas>();
}

void Update(){
  if(Input.GetKeyDown(KeyCode.Return))
  {
    mainMenuCanvas.enabled = false;
    GlobalVars.G_START = true;
  }

  if(Input.GeKeyDown(KeyCode.Escape))
  {
    mainMenuCanvas.enabled = true;
    GlobalVars.G_START = false;
  }

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