課題2: バスケットの移動方法をキーボード入力に変更する
目的: マウスクリックではなく、キーボードの上下左右矢印キーでバスケットを瞬間的に移動できるように変更し、ユーザー入力の処理方法を学ぶ。
背景:
- ゲームのバスケットは3×3のグリッド上に配置されており、バスケットはグリッドの中心に瞬時に移動します。キーボード入力でも同様の挙動を実現する必要があります。
ステップ:
BasketControllerのUpdateメソッドを修正する:
- マウスクリックによる移動処理を削除し、上下左右矢印キーによる瞬間移動処理を追加します。
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回



ディスカッション
コメント一覧
まだ、コメントがありません