Unity-如何强制下一个输入?

时间:2018-10-19 10:12:28

标签: unity3d

我正在编码一个战斗菜单,它有一个角色选择面板和一个子菜单面板,您需要按Enter键才能从每个菜单移至下一个菜单,但是它跳过了进入子菜单并直接进入敌人的道路选择,我相信这是因为我的代码保留了输入,因此有什么办法可以迫使它转到下一个输入并舍弃当前具有的值。

public void CursorControl()
{
    if (CharacterSelectActive == true)
    {
        if (Input.GetKeyDown(KeyCode.Return))
        {
            for (int i = 0; i < (CursorPosition); i++)
            {
                MovesPanelCursor.transform.Translate(42f, 0.0f, 0.0f);
            }
            CursorPosition = 0;

            PanelSwitch();
        }
    }
    if (MoveSelectActive == true)
    {


        if (Input.GetKeyDown(KeyCode.Escape))
        {
            for (int i = 0; i < (CursorPosition); i++)
            {
                MovesPanelCursor.transform.Translate(42f, 0.0f, 0.0f);
            }
            CursorPosition = 0;
            PanelSwitch();
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            CursorPosition = CursorPosition + 1;
            MovesPanelCursor.transform.Translate(-42f, 0.0f, 0.0f);
            Debug.Log(CursorPosition);
            if (CursorPosition > 3)
            {
                MovesPanelCursor.transform.Translate(42f, 0.0f, 0.0f);
                CursorPosition = 3;
            }
        }
        if (Input.GetKeyDown(KeyCode.W))
        {
            CursorPosition = CursorPosition - 1;
            MovesPanelCursor.transform.Translate(42f, 0.0f, 0.0f);
            Debug.Log(CursorPosition);
            if (CursorPosition < 0)
            {
                MovesPanelCursor.transform.Translate(-42f, 0.0f, 0.0f);
                CursorPosition = 0;
            }
        }

        if (Input.GetKeyDown(KeyCode.Return))
        {
                if (CursorPosition == 0 || CursorPosition == -1)
                {
                    Attack();
                }
                if (CursorPosition == 1)
                {

                }
                if (CursorPosition == 2)
                {

                }
                if (CursorPosition == 3 || CursorPosition == 4)
                {

                }
            }
        }

public void PanelSwitch()
{
    CharacterPanel.SetActive(true);
    MoveSelectActive = !MoveSelectActive;
    MovesPanel.SetActive(MoveSelectActive);


}

1 个答案:

答案 0 :(得分:1)

请提供您的验证码吗?... -.- 如果您使用

检测回车键
if(Input.GetKey(KeyCode.Enter))
{
    // move to next menu
}

当按下回车键时,它将被按下而不是一个游戏帧,因此基本上它将进入您的子菜单,并立即跳到下一个菜单,而无需您进入中间菜单,因为该子菜单还检测到按下回车键

尝试使用

if(Input.GetKeyDown(KeyCode.Enter))
{
    // move to next menu
}

“向下”代替

编辑: 如果为“ PanelSwitch();”在内部调用CursorControl()时,请注意相同的输入仍然成立。在这种情况下,最好只设置MoveSelectActive或其他内容,然后等待下一帧Update()重新插入控制器

编辑:

诸如MoveSelectActive之类的变量在您的帖子中是非常不透明的,我无法理解它们的初始化内容,以及PanelSwitch()中引起的状态变化如何影响用户界面中的用户选项以及它们的含义在以下CursorControl()的流程中。

作为提示,我将开始发现流程问题,而不是获取键盘输入问题。我不太了解“强制下一次输入”的含义,也许您可​​以澄清一下,我想知道还有更多内容