LemonteaのUnity部屋

LemonteaのUnity部屋

Unityの使い方とかです~

初めてのスクリプト(2) Inputで キー入力 タップ クリック を判定

こんにちは。レモンティーです。

ゲームを作る上で欠かせないのが、プレイヤーさんの行動を認識することですね。
それがなかったら映画みたいになりますし…

Unityではその大事な役割をInputが担っています。

今回はInputについてです。

キー入力

キー入力の取得は

Input.GetKeyDown(KeyCode.A);

のように書きます。
これは、指定したキーが押された瞬間、trueを返します。
それ以外の時はfalseを返します。

なので使用例としては、

if(Input.GetKeyDown(KeyCode.A)){
  //ここにAキーが押された時の処理
}

のようにif文にいれて、特定のキーが押された場合だけの処理をつくったりします。
初めてのUnity(5)のジャンプもそのパターンですね。

キーの指定はKeyCode.~の部分です。
アルファベットのキーはAのようにそのままです。
EnterキーはReturn
SpaceキーはSpace です。

ほかのコードはここに(そんなに使いませんが…)↓
docs.unity3d.com

もうひとつ大事なことがあります。
それはDownの部分です。
これが「押した時」というニュアンスを与えています。
ほかにもUpや何も無しといったものがあり、まとめると

Input.GetKey 押してる間ずっとtrue
Input.GetKeyDown 押した瞬間だけtrue
Input.GetKeyUp 離した(指をあげた)瞬間だけtrue
です。

これはこの他にもたびたび登場する表現です。


ちなみに、なんでもいいからどれかのキーが押されたとき
が取得したい場合は、
Input.AnyKeyDownをつかいます。

十字キー(矢印キー)

プレイヤーの移動によく使われるのがこれですね。
別にKeyCodeで矢印を一つずつ取得してもいいのですが、
左右、上下でまとめて取得できる方法があります。

Input.GetAxis()です。
引数(()の中)としてstring型の軸を指定してあげると、
その軸の正か負、どちら向きの入力がされたかを
-1から1の間の数で返します。

デフォルトでは、
左右の軸はHorizontal、上下の軸はVerticalです。

なので、例えば

 float x = Input.GetAxis("Horizontal");
 float y = Input.GetAxis("Vertical");
 Vector3 Direction = new Vector3(x,y,0);

のようにすると、十字キーで入力された方向を取得でき、
前回の、オブジェクトの移動と合わせると、入力した向きに
プレイヤーを動かすことができます。

また、重力から察するにUnityのデフォルトでは
オブジェクトはxz平面にいて、y方向が高さなので、
それにあわせると移動は↓のように書けます。

    void Update () {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");      
        Vector3 Direction = new Vector3(x, 0, z)*0.15f;
        GetComponent<Rigidbody>().AddForce(Direction, ForceMode.VelocityChange);
	}

言い忘れましたがベクトルにはスカラーを掛け算できるので
4行目で適当な値を掛け算して移動の速さを調節しています。
なんせそのままだとー1から1のあいだですので、
作っているゲームと合わないこともしばしばあります。

タップ・クリック

タップやクリックですが…
じつはさっきのInput.AnyKeyは、タップやクリックも検知します。

わりとこれでよかったりしますが、特定のものだけ判定したいときは、
UIのボタンなどを使うか、↓のようにEventTriggerを使うといいです。

sawalemounity.hatenablog.com

それでもだめならRayをとばすやり方もあります。
ここ↓とかどうでしょう。

future-software-labo.anyagent.net


あと、マウスの入力は
Inpu.GetMouseButton()でもとれます。

これのすごいところは、左右どちらのクリックか区別できるところです。
()のなかに0,1,2のどれかを引数としてわたすことで判別します。

0が左 1が右 で、2は真ん中のホイールボタンです。 

例えば、左クリックが終わった(指が離れた)瞬間 なら

Input.GetMouseButtonUp(0);

です。


また、Input.touchCountで、何か所タッチされているか取得できます。
これをつかって条件分岐すれば、複数タップの操作も可能です。

switch(Input.toucuCount){
   case(0):
    //タップされていないときの処理
     break;
   case(1):
    //一か所タップされているときの処理
     break;
   case(2):
    //二か所タップされているときの処理
     break;
}

みたいな感じです。


さらに、タップされている座標の取得もできますが…
これは座標の種類の説明がいるので後日書きます。

ずいぶん長くなりましたが、今回はここまでです。

Next

sawalemounity.hatenablog.com

関連
今回のスクリプトの使用
sawalemounity.hatenablog.com

前回
sawalemounity.hatenablog.com