Input.GetButtonとInput.GetButtonDownの入力の違い
実はジョン剣太郎をジャンプさせる時に
スクリプトのGetButtonを
GetButtonDownに変更したんだよね
スクリプトのGetButtonを
GetButtonDownに変更したんだよね
GetButtonってなんすか?
Input.GetButtonやInput.GetKey、Input.GetMouseはボタン(キーボードやマウス)入力の関数である。ゲームを作る上で欠かせない関数のひとつだが、この派生でInput.GetButtonDownという末尾にDownの文字が入った関数がある。今回はこの2つの違いについて説明する。
Input.GetButton と Input.GetButtonDown の違い
ゲットボタンは
ボタン押している間ずっと、
ボタンダウンは
ボタンを押し下げた瞬間のみ
判定するんや
ボタン押している間ずっと、
ボタンダウンは
ボタンを押し下げた瞬間のみ
判定するんや
ゲームを再生していて、ボタン(キー)を押しっぱにすると不自然な挙動をしてしまうことがある。例えば前回紹介した剣太郎をジャンプさせるとき、Input.GetButtonを使ってボタンを押しっぱにすると、ジャンプモーションをずっと続けてしまうのだ。

Input.GetButtonでジャンプさせた場合。キーを押しっぱなしにするとジャンプ判定がずっと続いてしまう。アニメーションウィンドウ左側の「Jump」チェックボックスのチェックがずっと入っている
こういう場合はInput.GetButtonDown(キーを押した瞬間だけ判定)を使ったほうがよい。

Input.GetButtonDownでジャンプさせた場合。キーを押した瞬間に1回だけ判定するので、押しっぱなしにしても判定は続かない。「Jump」チェックボックスのチェックはすぐに外れている
もちろんInput.GetButtonを使った方がいい場合もある。ボタンを押している間ずっと連射するとか、旗を挙げ続けるとか、そういう動作をさせたい場合はGetButtonDownだとダメである。

インターネットからスクリプトをコピーしてきて改造することはよくあるが、なまじ動いてしまうので意外と気付かずに使い続けてしまうかもしれない。思ったように動いてくれない場合は、この違いを理解して改造すると解決できるかもしれないぞ!
ちなみにInput.GetButtonUpという、ボタンを離したときに判定する入力もある。これもKey、MouseButtonそれぞれ使える。「モンスターストライク」みたいに、引っ張って離した瞬間に撃つ!みたいな動作の時に使えるかもしれないね。

GetButtonUpのイメージ図
なるほど~
さすがそめ先生っす!
こんな機能があったんすね!
さすがそめ先生っす!
こんな機能があったんすね!
まっ 操作のキホンだな~
(コピペしてたから
気づかんかったわ~)
(コピペしてたから
気づかんかったわ~)