押した・押し続けた・離した
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 19/85。
Unity はキーについて 3 種類の異なる情報を取得でき、それぞれを Update() 内で尋ねます。
Input.GetKeyDown(KeyCode.Space): このフレームで Space キーが押されましたか?押すたびに 1 フレームだけ true になります。Input.GetKey(KeyCode.Space): 今、Space キーが押されていますか?Space キーを押し続けている間、毎フレーム true になります。Input.GetKeyUp(KeyCode.Space): このフレームで Space キーが離されましたか?キーが離されたとき、1 フレームだけ true になります。
60 フレーム毎秒で Space キーを半秒間押し続けると、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キーを押している間、スリングショットがチャージされ、離すとショットの情報が表示されます。
Update()内で、Input.GetKey(KeyCode.Space)がtrueの間、Time.deltaTimeをchargeに加算します。Input.GetKeyUp(KeyCode.Space)のとき、"Charge: " + chargeをログに出力し、その後chargeを0に設定します。
「プレイ」を押し、Spaceキーを押したままにしてから離します。Consoleに「Charge: 1.5」のような行が表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Slingshot : MonoBehaviour
{
float charge = 0f;
void Update()
{
// Spaceを押している間:chargeは毎秒1ずつ増える。
// Spaceを離したとき:chargeをログに出力し、その後0に戻す。
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド