0

私は再び :D 次の問題を取得しましたが、今回はそれを解くことができないようで、文法の問題ではないはずです ^^

さて、今は Classproject 用に UNity3D (C#) の Inputclass を作成しようとしています。入力自体が機能するようになりましたが、すべて問題ありません。しかし、私がそれをしなければならなかった理由、実行時にコントロールを変更可能にすることは、まだ問題です。キーを保存するさまざまな方法を試しました (テキストフィールドとキーコードの書き込み -> ゲーム デザイナーはそれを嫌っていました)。今、私はコルーチンでそれをやろうとしましたが、最後の試みはそれを別の関数に転送し、マウスが離された後にすべてのコードを開始し、入力を行うべきではありませんでした. とにかく、それは仕事です。これは、魔法を行うコードです。

    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);
    }

(このボタンはキーごとに存在します)。

マウスが離された後、次の入力を待つ方法を知っていますか?

具体的なコードは必要ありませんが、これを機能させる方法のヒントかもしれません。

4

3 に答える 3

0

私があなたの質問に正解した場合、マウスを離した後に押された次のキーを追跡する必要があります。これは、マウスを離した直後 (マウス リリース デリゲートで) ブール値 (x) を true に設定した後、解決するのはそれほど難しくありません。他のイベント デリゲート (プロセスのキャンセルを引き起こすイベント) の場合、値 (x) を false に設定します。キーを押すのではなく、その前にマウスが離されたかどうかを識別します。

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;
}

あなたの質問が正しいことを願っています。

于 2013-06-25T07:21:16.257 に答える
0

Thy @Jerdak と @user 2511414。私は問題の解決策を得ました :D 今朝はひらめきのようなものでした。ヒットしたキーを返すために必要なコードは次のとおりです。

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

KeyCodes を繰り返し処理し、キーが押されているかどうかを確認してから、実際に押されたキーを返します。他の解決策の問題点は、リードが回避可能な複数の If 部分を嫌うということでした。

于 2013-06-27T09:24:34.937 に答える