課題2: バスケットの移動方法をキーボード入力に変更する

2026年4月14日

広告

目的: マウスクリックではなく、キーボードの上下左右矢印キーでバスケットを瞬間的に移動できるように変更し、ユーザー入力の処理方法を学ぶ。

背景:

  • ゲームのバスケットは3×3のグリッド上に配置されており、バスケットはグリッドの中心に瞬時に移動します。キーボード入力でも同様の挙動を実現する必要があります。

ステップ:

BasketControllerUpdateメソッドを修正する:

  • マウスクリックによる移動処理を削除し、上下左右矢印キーによる瞬間移動処理を追加します。
  • Input.GetKeyDown を使用して、キーが押された瞬間に移動を行います。

修正後のUpdateメソッドのコード例:

using UnityEngine;
using UnityEngine.InputSystem; // 1. Input Systemを使うための宣言を追加

public class BasketController : MonoBehaviour
{
    void Update()
    {
        float moveDistance = 1.0f; // 移動する距離(1マス)
        Vector3 newPosition = transform.position;

        // 2. Keyboard.current を使用してキー入力を判定
        if (Keyboard.current.leftArrowKey.wasPressedThisFrame)
        {
            newPosition += Vector3.left * moveDistance; // 左に1マス移動
        }
        if (Keyboard.current.rightArrowKey.wasPressedThisFrame)
        {
            newPosition += Vector3.right * moveDistance; // 右に1マス移動
        }
        if (Keyboard.current.upArrowKey.wasPressedThisFrame)
        {
            newPosition += Vector3.forward * moveDistance; // 前(上)に1マス移動
        }
        if (Keyboard.current.downArrowKey.wasPressedThisFrame)
        {
            newPosition += Vector3.back * moveDistance; // 後ろ(下)に1マス移動
        }

        // 3. グリッド範囲内に制限(例: x, z が -1, 0, 1 の範囲)
        newPosition.x = Mathf.Clamp(Mathf.Round(newPosition.x), -1.0f, 1.0f);
        newPosition.z = Mathf.Clamp(Mathf.Round(newPosition.z), -1.0f, 1.0f);

        // 4. バスケットの位置を更新
        transform.position = new Vector3(
            Mathf.Round(newPosition.x),
            transform.position.y,
            Mathf.Round(newPosition.z)
        );

        /*
        // 以前のマウス移動処理はここにありますが、削除またはコメントアウトします。
        if(Input.GetMouseButtonDown(0))
        {
            // (省略)
        }
        */
    }
}

動作確認:

  • Unityエディタ上でプレイモードにし、上下左右矢印キーを押すとバスケットが瞬間的に1マス分移動することを確認する。
  • バスケットがグリッドの中心に整列していることを確認する。
  • グリッドの範囲外に移動しないことを確認する。

学習ポイント:

  • Keyboard.current.leftArrowKey.wasPressedThisFrame を用いた瞬間的なユーザー入力の処理方法。
  • グリッド上でのオブジェクトの移動制御。
  • オブジェクトの位置を整数に丸めてグリッド整列を維持する方法。
  • 不要なコードの削除と責任の分離。
訪問数 74 回, 今日の訪問数 1回

広告

Unity

Posted by hidepon