矢印キー入力の実装がしたい人
矢印キーって何の関数で取得すればいいんだろう、色々あるんだよなぁ。
あれ、矢印キーの名前ってなんだっけ…定数とかあった…?
こんな疑問にお答えします。
本記事の内容
●矢印キー操作の設定方法
●矢印キー取得あれこれ
この記事を書いている私は12才からフルスクラッチでゲームを作っています。
またコンパイラを専門として情報理工学の博士まで進学、中退をしており、プログラミング言語の文法にも関わる論文を書いていました。
本記事ではコピペで使える実行済みのコードと設定方法を紹介しつつ、狙った動きを作るにはどの関数を選べばいいのかのヒントも解説します。
※実行環境
Unity2021.3.1f1
Windows 10
これだけで矢印キーの取得がひととおり可能です
GetKey系の関数、GetAxis系の関数と2パターンを用意しました。
割と紛らわしい名前の関数が多いので、覚えるというよりかは都度ググったりコピペすればいいと思います。
using UnityEngine; public class Arrows : MonoBehaviour { private bool _bool; private float _float; void Update() { //左矢印キーを押した瞬間はtrue _bool = Input.GetKeyDown(KeyCode.LeftArrow); //右矢印キーを押している間はtrue _bool = Input.GetKey(KeyCode.RightArrow); //上矢印キーを離した瞬間はtrue _bool = Input.GetKeyUp(KeyCode.UpArrow); //上がプラス、下がマイナス _float = Input.GetAxis("Vertical"); //右がプラス、左がマイナス _float = Input.GetAxisRaw("Horizontal"); } }
●_bool
各判定の結果をtrue, falseで取得
●_float
x方向、y方向の入力量を取得
ゲームパッドなどのアナログ量を前提としているため、0と1ではなくfloat
矢印キー操作の設定方法
このスクリプトはゲームオブジェクトにアタッチすることで動作します。
Unityは基本的に、各ゲームオブジェクトの関数に実装したい内容を記述することでカスタマイズが出来るという発想なので覚えておきましょう。
矢印キー取得の設定方法
1.「Hierarchy」ウィンドウの余白で「右クリック > 3D Object > Cube」
2.「Inspector」ウィンドウでCubeの「Transform」を下図のように設定
3.「Project」ウィンドウの余白で「右クリック > Create > C# Script」
4.名前を「Arrows」に変更
5.サンプルコードをコピーペーストして保存
6.「Hierarchy」ウィンドウで追加した「Cube」をクリック
7.「Inspector」ウィンドウ最下部の「Add Component」ボタンをクリック
8.「arrows」と入力すると先ほど作った「Arrows」が出てくるのでクリック
以上によりCube内で矢印キーの操作を受け付けるようになりました。
あとはTransformの数値を更新するなり、Debug.Log関数なりで思った動作を実装してみてください。
矢印キー取得あれこれ
ソースの詳細を解説します。
カスタマイズをしたいときはひととおり理解しながらコピペをした方が、作業効率がアップするのでオススメです。
GetKey系でのキーの判別
GetyKey系の関数は、列挙体であるKeyCodeの値を渡すことが出来ます。
列挙体なのでコード補完を利用すれば入力ミスも軽減することが出来ます、かなりオススメです。
矢印キー4方向の定数は以下のとおりです。
●KeyCode.DownArrow…下方向
●KeyCode.LeftArrow…左方向
●KeyCode.RightArrow…右方向
DownやUpの違いは、キーボードの物理的な状態を考えると分かりやすいです。
②押していない
当たり前に感じるかもしれませんがこれが大事です。
この押している、押していないの区別を前提とすると、
●GetKey→①の状態ならtrue
●GetKeyUp→①から②の状態になったらtrue
このように分けられます。
気付きにくいのが「GetButtonDownとGetButtonは同時にtrueになる」ということです。
キーを押し始めた1フレーム目などを区別したい場合などは混乱する可能性があるので気を付けましょう。
GetAxis系でのキー入力
GetAxis系の関数ではWASD、矢印キー、ゲームパッドなど、移動などの目的によく使われるキーがまとめられています。
Verticalは垂直、Horizontalは水平を意味するように、上下左右のインターフェースと覚えておけば十分でしょう。
また今回のサンプルコードでは2つのGetAxis系の関数を使いましたが、以下のような違いがあります。
●GetAxisRaw…アナログスティックやキー入力の値が、入力した分だけそのまま代入される
ゲームパッドも扱えるとおり、GetAxis系の関数の返り値は0や1ではなく0~1のfloat型です。
むしろ0か1かで値を返してしまうと矢印キーを入力した瞬間にいきなり最高速でキャラクターが動き出したりしてしまうので、違和感が大きくなると思います。
そういった背景から演出上はGetAxisがお手軽です。
実装例はこちらの記事でも紹介していますが、特に難しい記述をすることなしにスムーズにキャラクターを動かすことが出来ます。
参考:【コピペでUnity】WASDを完全に理解してキャラクターを移動させる
ちなみに物理的な背景が分かったうえで実装をするのであればGetAxisRawの方が思い通りの実装が可能かと思います。
以上、矢印キーの入力に関してはこの辺りが安定だと思います。
個人的には自分でキーを管理できる、入力の状態を細かく区別できるという点でGetKeyに軍配が上がります。
ちなみにGetButton系の関数でもInput Managerを設定すれば似たようなことが出来ますので、もっと掘り下げたい方は試してみてください。
参考:【コピペでUnity】このスクリプト1つだけでクリック実装は完了!ホイールクリックも楽勝
今回はこんなところです。
Unityはいいぞ。
コメント