Menu
CoddyTech

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

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

challenge icon

チャレンジ

簡単

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に戻します。
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン