Menu
CoddyTech

このフレームで押された

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

isPressedは、押し続けている間の各フレームで「今、押されているか?」に答えます。押すたびに一度だけ実行したい処理には、コントロールがさらに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

チャレンジ

中級

短距離走者はスターティングブロックで待っています。そのスクリプトにはspeed(6)とcrouch(0.3)があります。

  • Spaceを押すと、走者はブロックに身をかがめます。crouch単位だけ下に移動し、Setがログに記録されます。
  • その後Spaceを離すと、走者は再び立ち上がり(crouch単位だけ上に移動)、Go!がログに記録され、走り始めます。それ以降は、毎秒speed単位の速さで+z方向に走ります。
  • Spaceを押し続けても、Setが記録されるのは1回だけで、フレームごとには記録されません。走者が走り始めると、Spaceを押しても何も起こりません。

Keyboard.currentでSpaceの状態を読み取ります。Playを押し、Spaceを押し続けてから離し、その後Checkを押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;

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

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

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

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