2015年06月27日

引き続き、Input.anyKeyの検証


さて先日から、UnityのInput系統の動作検証をつづけておりマス。

先日の段階でですね…

キーを押す
↓
何のキーが押されたか確認する
→正解のキーの場合は、『正解だよッ!!(・∀・)』
→不正解のキーの場合は、『不正解だッ!!ヽ(`Д´#)ノ』

このスクリプトって無理くさい?(;・∀・) という結論に達したのですが、
頭の体操がてら、実装できないもんかな? とちょっと考えてみました。

そういうわけでちょっと調べてみたところ、『Input.anyKey』という関数を発見。
公式リファレンスはこちらです。

現在何らかのキーまたはマウスボタンが押されているかどうか

なるほど。これをうまい具合に使ってあげれば、
最初のスクリプトも再現できるんじゃね? と思いまして。

そう思って、先日のコードのInput.GetKeyDownのところに、
以下のように手を加えてみました。

//結果表示
if(Input.anyKey){
    if(Input.GetKeyDown(word.Substring(count,1))){
        Debug.Log ("Input.GetKeyDown'"+word.Substring(count,1)+"'だよっ(`・ω・´)");
        count=count+1;
        //文字数を超えたらゼロに戻す
        if(count>=countMax){
            count=0;
        }
    }
}
else{
    Debug.Log ("ブッブー!! 不正解だよッ!!ヽ(`Д´#)ノ");
}

要はInput.anyKeyでキーが押されてるかどうかを取得。
押された時は、押されたキーが正解のキーかどうかを確認する…という算段です。
これで走らせてみたところ……

01
こんな感じで、正解のキーを押しても不正解の判定が出ます。
うーん…この『Input.anyKey』という関数は、
どうやら『押している間はtrueを返し続ける』という機能なようですね。

ならばということで、さらに手を加えたコードがこちら。
色々と手を加えているので、コード全体を載せます

using UnityEngine;
using System.Collections;

public class InputTest : MonoBehaviour {

    //各種変数設定
    private string word="abcdefg";    //問題文字列
    private int count=0;              //現在の文字
    private int countMax=0;           //文字の最大数

    private bool keyStatus;           //キーの状況

    // Use this for initialization
    void Start () {

        //文字数確認
        countMax=word.Length;

        //キーの状況を設定
        keyStatus=false;
    
    }
    
    // Update is called once per frame
    void Update () {

        //結果表示
        if(!keyStatus && Input.anyKey){

            if(Input.GetKeyDown(word.Substring(count,1))){
                Debug.Log ("Input.GetKeyDown'"+word.Substring(count,1)+"'だよっ(`・ω・´)");
                count=count+1;
                //文字数を超えたらゼロに戻す
                if(count>=countMax){
                    count=0;
                }
            }
            else{
                Debug.Log ("ブッブー!! 不正解だよっ!!ヽ(`Д´#)ノ");
            }
        }

        //キーの状況設定
        keyStatus=Input.anyKey;

    }
}

これで走らせてみたところ、以下の様な結果になりました。
02
うん。いい感じですね。上々です。
キチンと正解のキーの時は正解判定だけ、
不正解の時は不正解のときだけ…て反応でした。

コードのキモは、前のフレームの時のキーの状況を保存しておいて、
『前のフレームではキーは押されてない&今のフレームではキーが押されてる』
という場合のみに反応するようにしてあることです。

これを使えば不正解の反応も出来るので、
例えば『正解の時はピンポン!! 不正解の時はブッブー!! て音を鳴らす』
て感じの機能を持たせることも出来ますね~。

なんて上機嫌で構えてたら、コード補完機能で、こんなのを見つけました。
03
……(´・ω・`)
しかもInputの公式リファレンスには、
『Input.anyKey』のすぐ下に『Input.anyKeyDown』ありますね…
なんで気が付かなかったのか…(´・ω・`)

一応ですね…この『Input.anyKeyDown』を使えば、
以下のように、最初のコードのままでもOKです。

//結果表示
if(Input.anyKeyDown){
    if(Input.GetKeyDown(word.Substring(count,1))){
        Debug.Log ("Input.GetKeyDown'"+word.Substring(count,1)+"'だよっ(`・ω・´)");
        count=count+1;
        //文字数を超えたらゼロに戻す
        if(count>=countMax){
            count=0;
        }
    }
}
else{
    Debug.Log ("ブッブー!! 不正解だよッ!!ヽ(`Д´#)ノ");
}

うーん…なんという無駄な努力……(´・ω・`)
まぁ、頭の体操をしたと自分に言い聞かせておきます……(´・ω・`)


コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)