等待下一个输入并将其存储(Unity/C#)

本文关键字:Unity 存储 下一个 输入 等待 | 更新日期: 2023-09-27 18:19:43

me再次:D我有下一个问题,但这次看起来我无法解决,而且也不应该是语法问题^^

好吧,现在我正试图为我们的Classproject制作一个UNity3D(C#)的Inputclass。我让输入本身工作,一切都很好。但我必须这样做的原因,使控件在运行时可以更改,仍然是一个问题。我尝试了不同的方法来保存密钥(文本字段和编写密钥代码->我们的游戏设计师不喜欢它)。现在我试着用Coroutines做这件事,最后一次尝试是将它转移到另一个函数,并在鼠标释放后启动所有代码,不应该进行任何输入。不管怎样,它不起作用。这是应该发挥魔力的代码:

    void PassKey(string wantedKey)
{
    if (Input.GetKey(KeyCode.Mouse0) == false)
    {
        Event uInput = Event.current;
        wantedKey = uInput.character.ToString();
        Debug.Log (wantedKey + uInput.character);
    }
}

这里叫这个:

        if(GUI.Button(new Rect(0,0,qScreenWidthX / 2, qScreenHeightX / 5), rightText))
    {
        PassKey(right);
    }

(每个键都有此按钮)。

你们知道鼠标释放后如何等待下一次输入吗?

我不需要具体的代码,但也许有一个提示,我可以让它工作。

等待下一个输入并将其存储(Unity/C#)

如果我得到你的问题是真的,你需要跟踪鼠标释放后按下的下一个键,这不是很难解决的,只要在任何鼠标释放后(在鼠标释放委托中)将布尔值(x)设置为真,而对于其他事件委托(任何导致进程取消的事件)将值(x)设置为假,不是在你的按键中,你会识别出是鼠标在它之前释放还是不释放,简单:

void mouseReleased(){// event when your mouse get released
   this.x=true;
}
void anyOtherEvent(){// for any other event that cancel the process, like wheel
   this.x=false;
}
void keyPressed(){//
   if(this.x){
     //ddo your operation
   }
   this.x=false;
}

希望我答对了你的问题。

基于上面OP的澄清评论,这里有一个片段应该适用于简单键,如"a"、"b"、"c"等。

捕捉击键的最简单方法是使用一个简单的标志来存储鼠标被点击的时间,或者使用任何你想用来指示下一个键将被重新分配的方法。在下面的示例中,单击鼠标左键时,代码将注意Input.inputString是否为空。当Input.inputString包含任何内容时,ReassignKey()将使用第一个键笔划作为要使用的键分配。

请记住,如果帧之间存在较大延迟,inputString可能包含多个关键帧笔划。这就是为什么我只使用第一个字符。

public class KeyCapture : MonoBehaviour {
bool captureKey = false;
string assignedKey = "a";
// Update is called once per frame
void Update () {
    ReassignKey();
    // Mouse-click = wait for next key press
    if(Input.GetButtonDown("Fire1")){
        captureKey = true;
        Debug.Log("Waiting for next keystroke");
    }
    // Display message for currently assigned control.
    if(Input.GetKeyDown(assignedKey)){
        Debug.Log("Action mapped to key: " + assignedKey);
    }
}
void ReassignKey(){
    if(!captureKey)return;
    // ignore frames without keys
    if(Input.inputString.Length <= 0)return;
    // Input.inputString stores all keys pressed
    // since last frame but I only want to use a single
    // character.
    string originalKey = assignedKey;
    assignedKey = Input.inputString[0].ToString();
    captureKey = false;
    Debug.Log("Reassigned key '" + originalKey + "' to key '" + assignedKey + "'");
}
}

Thy@Jerdak和@user 2511414。我得到了问题的解决方案:D这有点像今天早上的顿悟,返回被击中的密钥所需的代码是:

for(int i = 0; i < e; i++)
    {
        if(Input.GetKey((KeyCode)i))
        {
        return (KeyCode)i;
        }
            {

我反复检查KeyCodes,检查是否按下了任何键,然后返回实际按下的键。其他解决方案的问题是,我的领导讨厌多个可以避免的If部件。