Menu
CoddyTech

キーボードとマウス

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

Input System は各デバイスにオブジェクトを割り当てます。Keyboard.currentはキーボードで、キーはそれぞれ名前を持つコントロールです。たとえば、spaceKey、aKey、upArrowKey、またはKeyの値で任意のキーを指定するKeyboard.current[Key.Space]があります。Mouse.currentはマウスで、leftButton、rightButton、positionを持ちます。コントロールのisPressedは、押し続けているすべてのフレームでtrueになります。これはInput.GetKeyと同じ動作です。この潜水艦は矢印キーで潜ったり浮上したりし、マウスボタンを押している間はサーチライトを点灯します。

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // キーボードが接続されていない

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

currentは最後に使用されたデバイスで、該当するデバイスがない場合はnullになります。スマートフォンやコンソールにはキーボードがないこともあり、nullチェックを行うことで、その環境でスクリプトが例外を発生させないようにできます。キーボードには軸がないため、下矢印キーとSキーは別々のキーです。Sキーでも潜るようにする潜水艦では、keyboard.downArrowKey.isPressed || keyboard.sKey.isPressedをテストします。Mouse.current.position.ReadValue()は、Input.mousePositionと同様に、画面の左下隅を基準にしたピクセル単位のポインター位置をVector2で返します。

challenge icon

チャレンジ

中級

Keyboard.currentとMouse.currentを使って熱気球を飛ばしましょう。

  1. rightArrowKeyまたはdKeyがisPressedの間、driftの速さで毎秒+x方向に進みます。leftArrowKeyまたはaKeyの場合は、-x方向に進みます。
  2. bool burnerは、spaceKeyまたはleftButtonが押されているかどうかを表します。flame.SetActive(burner);を呼び出します。
  3. バーナーがオンのときはriseの速さで上昇し、オフのときはsinkの速さで下降します。ただし、groundYより下にはなりません。

「プレイ」を押して飛ばしましょう。Spaceキーまたはマウスボタンを押し続けると上昇します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // 矢印キーまたはAとDで漂い、Spaceまたはマウスで燃焼する
    }
}

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

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