Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回はUnityでキーボードから入力された文字が何だったか?という情報をスクリプトで判定する事をしていきたいと思います。Unityで入力デバイス(キーボードやマウス、ゲームパッド等)を使ってキャラクターを動かしたりステータス画面を表示したりといった事をしていますが、スクリプトでこの入力デバイスからの入力を判断するのが、Input.GetButtonDown(InputManagerで設定したボタンが押されたかどうかの取得)Input.GetKeyDown(指定したキーが押されたかどうかの取得)Input.GetMouseButtonDown(指定したマウスのボタンが押されたかどうかの取得)といった関数になります。上の例ではそれぞれ1度だけ押された時点で『押された!』という情報が取得出来ますが、それぞれに『押している間ずっと』、『押した後に離した時』といったタイミングで取得出来る関数があります。Input.GetButtonの引数に指定するボタンの設定等に関してはUnityのInputManagerの入力設定を変更しキャラクターの操作性を変えるUnityのInputManagerの入力設定を変更しキャラクターの操作性を変更します。18:43↑を参照してください。今回はキーボードの入力について見ていきたいと思います。他の関数でもタイミングについては同じなので関数名をそれに合わせて変更するだけです。スポンサーリンクInput.GetKey等に指定する引数は?Input.GetKey等の関数で指定する引数はキーボードのキーに対応する文字を渡すか、KeyCodeの列挙体を渡します。{Debug.Log("LeftShiftKeyCode");}}の二通りの判断が出来ます。キーボード、ジョイスティック、ゲームパッド入力をサポートします。docs.unity3d.com↑で確認出来ます。keyboard.docs.unity3d.com↑で確認出来ます。判断に利用するキーがわからなかったら上記のUnity公式マニュアルを見て頂くと載っています。Input.GetKey等の戻り値は何?Input.GetKey等の関数の戻り値は真偽値であるbool型の値(trueかfalse)が返ってきます。戻り値って何!?って言う人もいるかもしれませんが・・・、戻り値は関数を実行した結果の最終的に得られる値ですね。Input.GetKey等ではtrueかfalseという値が返ってくるのでif文といっしょに使い、引数で指定したキーが押されているかどうかを判断出来ます。キーを検知する場所キーボードのキーが押されているかどうかはUpdate関数内に記述します。Update関数は毎フレーム呼ばれる関数なのでキーボードが押されているかどうかの判断に最適です。Input.GetKeyInput.GetKeyは対応するキーボードのキーが押されている間ずっと呼ばれます。FPSやTPSゲーム等の攻撃に対応するキーを押している間はずっとマシンガンを撃ちたい時に使用するといいと思います。それではInput.GetKeyを実際に使ってみましょう。『a』キーが押されている間はずっとコンソールに『a』という文字が表示されるようにしてみます。{Debug.Log("A-KeyCode-");}}正直なところ関数に渡す引数の所で挙げたサンプルと同じなので解説はいらないと思いますが・・・・(^_^;)このスクリプトをヒエラルキー上のゲームオブジェクトにドラッグ&ドロップしてUnityを実行してaキーを押すと↑のようにaキーを押している間はコンソールに文字列が表示されます。離した時は実行されていません。Input.GetKeyDownInput.GetKeyDownはキーが押された時のフレームだけ判断されます。その為キーをずっと押していても次のフレームでは押しているという判定がされません。FPSやTPSで考えると普通の拳銃を撃つ場合はこのInput.GetKeyDownの方が向いていますね。次に銃を撃つ時は一度キーを離してもう1度キーを押す必要があります。それではEnterキーを押した時の例を見てみましょう。{Debug.Log("Enter-KeyCode-");}}Enterキーに対応する文字列は『enter』ではなく『return』みたいです。今回はInput.GetKeyDownを使用していますのでEnterキーをずっと押していてもコンソールに表示されるのは1回だけです。その後キーを離しまた押すと1回だけ判断され同じ状態が続きます。Input.GetKeyUpInput.GetKeyUp関数は対応するキーを一旦押した後、離した時に判定されます。石を投げるような動作をする時にキーを押した時に石を持って構えるアニメーションにしておき狙いを定めます。狙いを定めた後にキーを離したらそこに石を投げる。いった時にInput.GetKeyUpは使えると思います。Spaceキーを押して離した時に文字列が表示されるようなスクリプトを作成してみます。{Debug.Log("Space-KeyCode-");}}Unityの実行ボタンを押しSpaceキーを押して離してみましょう。↑のように押した時は文字列は表示されず離した時に文字列が表示されています。ボタンやマウスでのタイミングについて今回はキーボードのキー入力限定で見ていきましたが、Input.GetButtonやInput.GetMouseButton等もDownやUpを変えて使用すると同じタイミングで実行されるのを確認出来ます。引数に指定するものはIntut.GetButton系はInputManagerで設定した名前(例えばFire1)Input.GetMouseButton系はマウスのボタンに対応する番号(左ボタンは0、右ボタンは1、中ボタンは2が対応)になっています。Input.anyKeyとInput.anyKeyDown特定のキーではなくキーボードのキーかマウスのボタンが押されているかだけを判断したい時もあると思います。そんな時はInput.anyKey(押している間ずっと)とInput.anyKeyDown(押した時のフレーム1回だけ)を使用します。これらはキーボードのキーだけでなくマウスのボタンを押した時にも反応するので注意が必要です。それではサンプルスクリプトを使って確認してみましょう。{Debug.Log("anyKey");}}Input.anyKeyはキーボードのキー、マウスのボタンが押されている間ずっと実行されています。{Debug.Log("anyKeyDown");}}Input.anyKeyDownはキーボードのキー、マウスのボタンが押された1回だけ実行されています。特定のキーやマウスの検知が必要ない場合はこれらを使うと良さそうですね。どのキーを押したか知りたいここまででは特定のキーが押されたかどうかのbool型の値を得ることは出来ましたが、実際に押したキーの取得は出来ていませんでした。キーが押された時にDebug.Logで対応する文字を手動で記述し表示していただけです。現在のフレームで押したキーが何だったかを知りたい時はInput.inputStringを使用します。Input.inputStringは現フレーム内でキーボードで入力された文字列が入ります。{Debug.Log(c);}}}}}}↑のようにすれば押したキーが押されたフレーム内で表示されます。Input.anyKeyDownの判定の後にInput.inputStringで押したキーを表示するのでBackSpaceやTab、Enter等のAscii文字以外のものは空白で表示されてしまいます。その為の処理がInput.inputStringとエスケープ文字(\bはBackSpaceキーをあらわす)を使った判定をしている処理です。エスケープ文字では空白文字が\sなんですが、うまく判定が出来なかったのでInput.GetKeyDown(“space”)で判定して個別に出力しています。それ以外でInput.inputStringが空文字でなければコンソールにその文字を表示するようにしています。Input.inputStringで注意しなければいけないのはstring型の値ということです。同時にaとbを押した場合Input.inputStringの値はabになります。その為Input.inputStringの値をそのまま使うのではなく繰り返し文を使ってInput.inputStringから1文字づつ取りだし判定を行っています。Input.inputStringは小文字や大文字、数字と記号なども個別に取得出来ますがすべてのキーに対する対応が出来ていないと空文字が表示される可能性もある為注意が必要です。終わりにInput.GetButtonDown等を使ってInputManagerで設定したボタンに対応するキーやマウス、ゲームパッドのボタンを取得した方が色々なデバイスで操作するゲームを作成する時に便利です。キーボードをメインに使ったゲーム(タイピングゲーム)やゲームにキーボードを使ったショートカットキー操作を搭載したい場合はキーが直接押されているか判断した方が良い事もあります。いうものを作成する時に今回の実行されるタイミングを知っておくと役に立つかもしれませんね。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/18個人的にUnity2019.2.18f1をインストールしました。2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。