如何使用GetKeyDown()有效地检测何时释放任何密钥

时间:2019-02-09 23:05:51

标签: c# unity3d keycode

首先,我是C#和Unity的新手,如果我缺乏被认为是常识的内容,请提前道歉。另外,我在这里检查了其他问题,但没有找到任何能特别解决我的特定问题的答案。但是,如果有的话,我将为您提供帮助。

无论如何,我正在尝试编写一些代码,这些代码将在按住键时播放声音,并在释放键时停止播放。不同的键会播放不同的声音,因此GetKeyUp()函数应适用于当前所按的任何键。

我已经声明了inputKey的字符串,并且为inputKey分配了所按下的任何键,然后将其传递给包含GetKeyUp()函数的if语句。我已经尝试过这种方法的许多小变化,但是我目前正在使用的方法是唯一一种不会产生错误消息的方法(尽管代码仍然无法正常工作)

public string inputKey;

else if (Input.GetKeyDown(KeyCode.S))
    {
        freq = 293.66;
        gain = volume;
    }

inputKey = (Input.inputString).ToUpper();

if (Input.GetKeyUp(KeyCode.inputKey));
    {
        gain = 0;
    }

因此,在上面的示例中,当按下键S时,会播放声音。 inputKey将显示为“ S”,因此我希望“ Input.GetKeyUp(KeyCode.inputKey)”等同于“ Input.GetKeyUp(KeyCode.S”),并且声音会停止播放,但事实并非如此并且声音继续播放。

非常感谢您的任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

我会改用Input.GetKey()

与其检查“ S是否下调?开始播放S声音。不是A下调?开始播放A声音。是否释放了任何键?它是什么键?停止播放该声音“我只需检查每个键的当前状态并根据该状态开始或停止声音。

例如

soundOnS.gain = Input.GetKey(KeyCode.S) ? volume : 0;

您当前的方法无法而且永远无法充分处理如果某人同时按下多个键时会发生的情况:当他们举起一根手指,释放一个键(而不是另一个!)时,应该是什么声音玩吗?