このフレームで押された
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になります。
チャレンジ
中級Spaceキーで短距離走者をスタートさせます。下がってしゃがみ、上がって走ります。
Update()で、!runningかつKeyboard.current.spaceKey.wasPressedThisFrameのとき:setを設定し、crouch分下に移動して、Setをログに出力します。setかつwasReleasedThisFrameのとき:setを解除し、runningを設定して、crouch分上に移動し、Go!をログに出力します。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プレイグラウンド