課題2: バスケットの移動方法をキーボード入力に変更する
目的: マウスクリックではなく、キーボードの上下左右矢印キーでバスケットを瞬間的に移動できるように変更し、ユーザー入力の処理方法を学ぶ。
背景:
- ゲームのバスケットは3×3のグリッド上に配置されており、バスケットはグリッドの中心に瞬時に移動します。キーボード入力でも同様の挙動を実現する必要があります。
ステップ:
BasketController
のUpdate
メソッドを修正する:
- マウスクリックによる移動処理を削除し、上下左右矢印キーによる瞬間移動処理を追加します。
Input.GetKeyDown
を使用して、キーが押された瞬間に移動を行います。
修正後のUpdate
メソッドのコード例:
void Update()
{
float moveDistance = 1.0f; // 移動する距離(1マス)
Vector3 newPosition = transform.position;
if(Input.GetKeyDown(KeyCode.LeftArrow))
{
newPosition += Vector3.left * moveDistance; // 左に1マス移動
}
if(Input.GetKeyDown(KeyCode.RightArrow))
{
newPosition += Vector3.right * moveDistance; // 右に1マス移動
}
if(Input.GetKeyDown(KeyCode.UpArrow))
{
newPosition += Vector3.forward * moveDistance; // 前(上)に1マス移動
}
if(Input.GetKeyDown(KeyCode.DownArrow))
{
newPosition += Vector3.back * moveDistance; // 後ろ(下)に1マス移動
}
// グリッド範囲内に制限(例: 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);
// バスケットの位置を更新
transform.position = new Vector3(
Mathf.Round(newPosition.x),
transform.position.y,
Mathf.Round(newPosition.z)
);
/*
// 以前のマウス移動処理はここにありますが、削除またはコメントアウトします。
if(Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, Mathf.Infinity))
{
float x = Mathf.RoundToInt(hit.point.x);
float z = Mathf.RoundToInt(hit.point.z);
transform.position = new Vector3(x, 0, z); // バスケットの位置を更新
}
}
*/
}
動作確認:
- Unityエディタ上でプレイモードにし、上下左右矢印キーを押すとバスケットが瞬間的に1マス分移動することを確認する。
- バスケットがグリッドの中心に整列していることを確認する。
- グリッドの範囲外に移動しないことを確認する。
学習ポイント:
Input.GetKeyDown
を用いた瞬間的なユーザー入力の処理方法。- グリッド上でのオブジェクトの移動制御。
- オブジェクトの位置を整数に丸めてグリッド整列を維持する方法。
- 不要なコードの削除と責任の分離。
ディスカッション
コメント一覧
まだ、コメントがありません