首页 > 解决方案 > 发行版中的键盘控件问题 - 在统一编辑器中未发生

问题描述

我正在制作一个需要您按 Enter 键才能开始游戏的游戏,我已经对其进行了设置,以便如果检测到主菜单对象,则会将 bool 设置为 true,这允许您在按 Enter 时开始游戏(删除菜单游戏对象)

  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。

    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 来恢复菜单。然而,这不会发生在统一编辑器中,在那里我可以垃圾邮件进入和逃脱,菜单将出现并被完美地销毁。

我希望对此事有一些见解,因为我不确定在遇到统一编辑器中没有出现的问题时如何继续,因此我无法调试。

感谢您的时间。

标签: c#unity3d

解决方案


这不是您应该在 Unity 中实现菜单的方式。创建和销毁游戏对象是 CPU 密集型的,当您在重复出现的菜单或对象上进行跟踪时变得难以跟踪,尤其是当您的项目扩展时。

相反,有一个名为“主菜单画布”的主菜单游戏对象并将你的画布附加到该对象上,然后附加以下脚本:

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

}

推荐阅读