如何使用 GetKeyDown() 有效检测何时释放任何键

How to use GetKeyDown() to efficiently detect when any key is being released

首先我要说的是,我对 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' 并且声音停止播放,但事实并非如此,声音继续播放。

如有任何帮助或建议,我们将不胜感激。

我会改用 Input.GetKey()

而不是检查“S按下了吗?开始播放 S 音。A 按下了吗?开始播放 A 音。有没有释放任何键?它是什么键?停止播放那声音”我会简单地检查每个键的 当前状态 并根据该状态启动或停止声音。

例如

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

你目前的方法不能,也永远不能,充分处理如果有人同时按下多个键会发生什么:当他们抬起一根手指,释放一个键(而不是另一个!)时会发出什么声音应该玩?