押した・押し続けた・離した
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 12/67。
Unity ではキーについて 3 種類の異なる情報を取得でき、いずれも Update() 内で確認します。
Input.GetKeyDown(KeyCode.Space): このフレームで Space キーが押されたか?押すたびに 1 フレームだけ true になります。Input.GetKey(KeyCode.Space): 今 Space キーが押されているか?Space キーを押し続けている間、すべてのフレームで true になります。Input.GetKeyUp(KeyCode.Space): このフレームで Space キーが離されたか?キーを離したときに 1 フレームだけ true になります。
1 秒あたり 60 フレームで Space キーを 0.5 秒間押し続けると、GetKey は 30 フレームで true になり、そのうち最初のフレームで GetKeyDown が true になり、最後のフレームの次のフレームで GetKeyUp が true になります。押すたびに 1 回発射する大砲には GetKeyDown を使います。GetKey を使うと、1 回のキー入力で 30 発発射されます。
public int shots = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
shots++;
Debug.Log("Shots fired: " + shots);
}
}GetKeyUp は、プレイヤーがキーを離したときに起こること(たとえば、スプリントの終了)に使います。3 つとも現在のフレームについてのみ判定するため、Update() 内で使います。これはすべてのフレームで実行されますが、Start() は 1 回しか実行されず、ほとんどすべてのキー入力を見逃してしまいます。
チャレンジ
簡単Spaceキーを押している間、パチンコのチャージが増えます。Spaceキーを押している1秒ごとにchargeが1ずつ増え、押していない間は増えません。Spaceキーを離したら、Charge: に続けてチャージ量をログに出力し(例:Charge: 1.5)、次のショットに備えてchargeを0に戻します。
Playを押し、Spaceキーを押してから離して、Consoleを確認してください。その後、Checkを押してください。
自分で試してみよう
using UnityEngine;
public class Slingshot : MonoBehaviour
{
float charge = 0f;
void Update()
{
// Spaceを押している間: chargeは毎秒1ずつ増加します。
// Spaceを離したとき: chargeをログに記録し、その後0に戻します。
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。