Menu
CoddyTech

押した・押し続けた・離した

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 回だけ実行されるので、ほとんどすべてのキー入力を見逃してしまいます。

challenge icon

チャレンジ

簡単

Spaceキーを押している間、スリングショットがチャージされ、離すとショットの情報が表示されます。

  1. Update()内で、Input.GetKey(KeyCode.Space)がtrueの間、Time.deltaTimeをchargeに加算します。
  2. 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プレイグラウンド