0

我正在制作自己的 InputManager 以在游戏期间重新映射键。

问题是我已经为每个快捷方式的父级分配了类,当在调试器上按下按钮时,我可以看到来自另一个键的数据。而且只有这把钥匙不断地被一遍又一遍地改变。

这是我的示例:Up是按钮的父级,UpS是按下的按钮,它从其父级调用方法。在每个父子中,它的设置方式与那里相同。 检查员的层次结构 - 键的分配 在此处输入图像描述

按下按钮我打电话

public void ToggleChangeButtonPannel(Button button)
{
    this.ActionText.text = Description;
    this.CurrentKeyText.text = Name;

    if (Panel.enabled)
    {
        Panel.enabled = false;
    }
    else
    {
        Panel.enabled = true;
    }
}

在更新时,我检查面板是否可见。我认为问题可能出在 Update() 方法的规范上。它是否在每个实例上并行工作?如果是这种情况 - 是否可以在 Update() 方法之外使用Input.anyKeyDown ?

private void Update()
{
    if (!Panel.enabled)
    {
        return;
    }
    if (Input.anyKeyDown)
    {
        var currentKey = Key;
        try
        {
            var newKey = (KeyCode)System.Enum.Parse(typeof(KeyCode), Input.inputString.ToUpper());

            if (Shortcuts.TryChangeKeyCode(currentKey, newKey))
            {
                RenameButtons(newKey);
            }
            else
            {
                //Error message handling
            }
        }
        catch
        {
            //Error message handling
        }
    }
}
4

1 回答 1

0

问题就像我对 Update() 方法所想的那样。我已经通过使用 caroutine 修复了它。

public void ToggleChangeButtonPannel(Button button)
{
    ActionText.text = Description;
    CurrentKeyText.text = Name;

    if (Panel.enabled)
    {
        Panel.enabled = false;
    }
    else
    {
        Panel.enabled = true;
        StartCoroutine(KeyRoutine());
    }
    EventSystem.current.SetSelectedGameObject(null);
}


IEnumerator KeyRoutine()
{
    while (!Panel.enabled || !Input.anyKeyDown)
    {
        yield return null;
    }
    try
    {
        var newKey = (KeyCode)System.Enum.Parse(typeof(KeyCode), Input.inputString.ToUpper());
        if (Shortcuts.TryChangeKeyCode(Key, newKey))
        {
            RenameButtons(newKey);
            Key = newKey;
            Panel.enabled = false;
        }
        else
        {
             StartCoroutine(RemoveAfterSeconds(3, Panel));
        }
    }
    catch
    {
        StartCoroutine(RemoveAfterSeconds(3, Panel));
    }
}
于 2018-02-01T14:17:07.123 回答