Menu
CoddyTech

このフレームで押された

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 46/60。

isPressedは、押し続けている間、毎フレーム「今、押されているか?」に答えます。1回の押下につき1度だけ何かを実行したい場合、コントロールにはさらに2つの状態があります。wasPressedThisFrameは、キーまたはボタンが押されたフレームにだけtrueになり、wasReleasedThisFrameは、離されたフレームにだけtrueになります。これらはInput.GetKeyDownとInput.GetKeyUp、およびGetMouseButtonDownとGetMouseButtonUpの代わりになります。このスタンプは、マウスボタンを押すと下がり、離すと上がります。

using UnityEngine;
using UnityEngine.InputSystem;

public class Stamp : MonoBehaviour
{
    public float drop = 0.5f;
    private int stamps;

    void Update()
    {
        Mouse mouse = Mouse.current;

        if (mouse.leftButton.wasPressedThisFrame)
        {
            transform.position += Vector3.down * drop;
            stamps++;
            Debug.Log("Stamp " + stamps);
        }
        if (mouse.leftButton.wasReleasedThisFrame)
        {
            transform.position += Vector3.up * drop;
        }
    }
}

0.5秒間クリックを押し続けても、Stamp 1と一度だけログに出力され、スタンプは一度下がって一度上がります。最初のifでisPressedを使うと、同じクリックで約30回ログに出力され、スタンプは机に15単位沈み込んでしまいます。キーも同じように動作します。Keyboard.current.spaceKey.wasPressedThisFrameは、スペースキーを押すたびに一度だけtrueになります。

challenge icon

チャレンジ

中級

Spaceキーで短距離走者をスタートさせます。下がってしゃがみ、上がって走ります。

  1. Update()で、!runningかつKeyboard.current.spaceKey.wasPressedThisFrameのとき:setを設定し、crouch分下に移動して、Setをログに出力します。
  2. setかつwasReleasedThisFrameのとき:setを解除し、runningを設定して、crouch分上に移動し、Go!をログに出力します。
  3. runningの間、1秒あたりspeed単位の速度で+z方向に移動します。

「プレイ」を押し、Spaceキーを押したままにしてから離します。ConsoleにSet、続いてGo!と表示されます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;

public class Sprinter : MonoBehaviour
{
    public float speed = 6f;
    public float crouch = 0.3f;

    private bool set;
    private bool running;

    void Update()
    {
        // Spaceを押したらしゃがんでSetをログに出力する。Spaceを離したら立ち上がり、Go!をログに出力して走る。
    }
}

本格的なゲームを作るのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド