キーボードによる操作 (1/5)
作成:2014-09-06 10:34
更新:2014-09-06 10:34
更新:2014-09-06 10:34
■Input.GetKeyでキー入力をチェックする
ゲームオブジェクトをプレイヤーが操作するためには、プレイヤーの入力に応じて動かすような処理を作成しなければいけません。
外部からの入力は、すべて「Input」というオブジェクトにまとめられます。これはUnityEngineパッケージにあるクラスのインスタンスです。このInputに用意されているメソッドを利用して入力された情報を調べます。
まずは「キーボード」の入力からやってみましょう。パソコンなどでゲームをプレイする場合、キーボードから入力してゲームを操作するのがもっとも一般的でしょう。これはInputクラスの「GetKey」というメソッドを利用します。
問題は、引数に用意する「キーの指定」の仕方でしょう。これは、「KeyCode」に用意されている値を使います。このKeyCodeは列挙体と呼ばれるもので、あらかじめ用意されている選択肢の中から選ぶようなときに用いられます。KeyCodeには、キーを示す値がひと通り揃っており、その中からチェックしたい値を指定してGetKeyすればいいのです。
では、Input.GetKeyを使ってゲームオブジェクトを動かす簡単なサンプルを挙げておきましょう。前回までのサンプルをそのまま利用しています(シーンにCubeが1つあり、これにmyscriptというC#のスクリプトがコンポーネントとして設定された状態です)。シーンを実行すると、上下左右のキーを押せばCubeが前後左右に動きます。
ここでは、 if (Input.GetKey(KeyCode.LeftArrow)){……}といった具合に、Input.GetKeyで上下左右の矢印キーについて1つ1つ状態を調べ、それらが押されていたら、this.transform.positionから取り出したVector3の値を増減しています。そしてひと通りチェックが終わったら、変更されたVector3をpositionに再設定してゲームオブジェクトを移動している、というわけです。
考え方はとても単純です。問題は、「KeyCodeに用意されているキーを示す値はどんなものか」でしょう。これは、整理するとざっと以下のようになります。
アルファベット関係――そのままアルファベットの大文字の名前で値が用意されています。
数字関係――テンキーは「Keypad数字」という名前、アルファベット部分の数字キーは「Alpha数字」という名前で用意されています。(Keypad1、Alpha2など)
矢印キー――「UpArrow」「DownArrow」「RightArrow」「LeftArrow」
機能キー関係――「RightAlt」「LeftAlt」「RightControl」「LeftControl」「RightCommand」「LeftCommand」「RightShift」「LeftShift」
ファンクションキー――「F数字」という名前で用意されています。(F1など)
その他のキー――「Space」「Tab」「Return」「Delete」「Backspace」「Escape」などが用意されています。
だいたいキーの名前やキャラクタそのものなので、迷うこともないでしょう。これらの値を使えば、押したキーがどうなっているかすぐにわかるのです。
外部からの入力は、すべて「Input」というオブジェクトにまとめられます。これはUnityEngineパッケージにあるクラスのインスタンスです。このInputに用意されているメソッドを利用して入力された情報を調べます。
まずは「キーボード」の入力からやってみましょう。パソコンなどでゲームをプレイする場合、キーボードから入力してゲームを操作するのがもっとも一般的でしょう。これはInputクラスの「GetKey」というメソッドを利用します。
bool 変数 = Input.GetKey( キーの指定 );このGetKeyメソッドは、真偽値を返すメソッドです。引数に、チェックしたいキーを示す値を指定すると、そのキーが押されていればtrue、押されていなければfalseを返します。
問題は、引数に用意する「キーの指定」の仕方でしょう。これは、「KeyCode」に用意されている値を使います。このKeyCodeは列挙体と呼ばれるもので、あらかじめ用意されている選択肢の中から選ぶようなときに用いられます。KeyCodeには、キーを示す値がひと通り揃っており、その中からチェックしたい値を指定してGetKeyすればいいのです。
では、Input.GetKeyを使ってゲームオブジェクトを動かす簡単なサンプルを挙げておきましょう。前回までのサンプルをそのまま利用しています(シーンにCubeが1つあり、これにmyscriptというC#のスクリプトがコンポーネントとして設定された状態です)。シーンを実行すると、上下左右のキーを押せばCubeが前後左右に動きます。
■KeyCodeの値について
ここでは、 if (Input.GetKey(KeyCode.LeftArrow)){……}といった具合に、Input.GetKeyで上下左右の矢印キーについて1つ1つ状態を調べ、それらが押されていたら、this.transform.positionから取り出したVector3の値を増減しています。そしてひと通りチェックが終わったら、変更されたVector3をpositionに再設定してゲームオブジェクトを移動している、というわけです。
考え方はとても単純です。問題は、「KeyCodeに用意されているキーを示す値はどんなものか」でしょう。これは、整理するとざっと以下のようになります。
アルファベット関係――そのままアルファベットの大文字の名前で値が用意されています。
数字関係――テンキーは「Keypad数字」という名前、アルファベット部分の数字キーは「Alpha数字」という名前で用意されています。(Keypad1、Alpha2など)
矢印キー――「UpArrow」「DownArrow」「RightArrow」「LeftArrow」
機能キー関係――「RightAlt」「LeftAlt」「RightControl」「LeftControl」「RightCommand」「LeftCommand」「RightShift」「LeftShift」
ファンクションキー――「F数字」という名前で用意されています。(F1など)
その他のキー――「Space」「Tab」「Return」「Delete」「Backspace」「Escape」などが用意されています。
だいたいキーの名前やキャラクタそのものなので、迷うこともないでしょう。これらの値を使えば、押したキーがどうなっているかすぐにわかるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using UnityEngine; using System.Collections; public class myscript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.Rotate(1, 1, 1); Vector3 v = this.transform.position; if (Input.GetKey(KeyCode.LeftArrow)){ v.x -= 0.05f; } if (Input.GetKey(KeyCode.RightArrow)){ v.x += 0.05f; } if (Input.GetKey(KeyCode.UpArrow)){ v.z += 0.05f; } if (Input.GetKey(KeyCode.DownArrow)){ v.z -= 0.05f; } this.transform.position = v; } }
※関連コンテンツ