Unityで立体迷路を作る②|リジッドボディ不要!スクリプトでプレイヤー移動・壁判定・UI操作

Unity立体迷路 前方が壁のため、Forwardボタンが批評時になっている画像 ゲームの作り方
前方が壁のため、Forwardボタンが非表示

🔍この記事では、リジッドボディやキャラクターコントローラーを使わずに、C#スクリプトだけでプレイヤーを移動させる方法を解説します。
前進左右回転の動作や、Ray(レイ)を使った壁判定を行い、スマホUIボタンと連携させる手順を紹介。
前回の記事で準備した迷路モデルとUIの土台に、このスクリプトを組み込むことで、動くプレイヤーを実装できます。

✅前回の記事はこちら👇

プレイヤー移動スクリプトの作成

プレイヤーをUIボタンで操作できるよう、次の機能をスクリプトで実装します

  • 前進(2m)
  • 左右90度回転
  • Rayで前方の壁を検出し、壁があると前進ボタンを非表示

PlayerMover.cs

using UnityEngine;

public class PlayerMover : MonoBehaviour
{
 public float moveDistance = 2f;//移動距離
 public float checkDistance = 2f;//光線の検出距離
 public LayerMask wallLayer; // 壁レイヤー
 public GameObject moveButton; // 前方へ進むUIボタン

 void Update()
 {
  // 前方に壁があるかをチェック
  Ray ray = new Ray(transform.position, transform.forward);
  bool isBlocked = Physics.Raycast(ray, checkDistance, wallLayer);

  if (moveButton != null) // ボタンの表示切替
   moveButton.SetActive(!isBlocked);
 }

 public void MoveForward()
 {
  if (!Physics.Raycast(transform.position, transform.forward, checkDistance, wallLayer)) // 壁がない時だけ移動
  {
  transform.position += transform.forward * moveDistance;
  }
 }

 public void RotateLeft()
 {
  transform.Rotate(0f, -90f, 0f);// 左に90度回転(Y軸)
 }

 public void RotateRight()
 {
 transform.Rotate(0f, 90f, 0f); // 右に90度回転(Y軸)
 }
}

Playerオブジェクトに このスクリプト👆をアタッチ。

インスペクターの設定

Playerのインスペクターで以下のように設定します

  • Wall Layer→ Wall を選択
  • Move Button→ Forward ボタンのGameObjectを指定
Unity立体迷路 プレイヤーのインスペクターにWall LayerとMove Buttonをアタッチした画像

UIボタンとの連携

各UIボタンの「クリック時(On Click)」に、スクリプト内の関数を割り当てる

  • ForwardPlayerMover.MoveForward()
  • 左回転 PlayerMover.RotateLeft()
  • 右回転PlayerMover.RotateRight()
Unity立体迷路 移動ボタンのインスペクターOn Clickに関数を割り当てた画像

動作確認とデバッグ

Playモードで操作ボタンの挙動を確認

  • 前方に壁がある場合 → Forwardボタンが非表示
  • 壁がない場合 → 前進可能

🛠トラブル時のチェックポイント

  • Rayの距離(Check Distance)を調整
  • 壁レイヤーが正しく設定されているか。
プレイヤーインスペクターのCheckDistanceの場所を示す画像

まとめ

今回は、リジッドボディやキャラクターコントローラーを使わずに、スクリプトでプレイヤーを前進・回転させ、壁判定とUIボタンを連携させる方法を解説しました。

次回は、Rayの可視化やプレイヤーアニメーションの追加方法を紹介し、迷路ゲームの動きにさらにリアリティを持たせます。

✅次の記事はこちら👇

コメント

タイトルとURLをコピーしました