キーボードとマウス
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で返します。
チャレンジ
中級Keyboard.currentとMouse.currentを使って熱気球を飛ばしましょう。
rightArrowKeyまたはdKeyがisPressedの間、driftの速さで毎秒+x方向に進みます。leftArrowKeyまたはaKeyの場合は、-x方向に進みます。bool burnerは、spaceKeyまたはleftButtonが押されているかどうかを表します。flame.SetActive(burner);を呼び出します。- バーナーがオンのときは
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プレイグラウンド