🔍この記事では、リジッドボディやキャラクターコントローラーを使わずに、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を指定

UIボタンとの連携
各UIボタンの「クリック時(On Click)」に、スクリプト内の関数を割り当てる
- Forward →
PlayerMover.MoveForward() - 左回転 →
PlayerMover.RotateLeft() - 右回転 →
PlayerMover.RotateRight()

動作確認とデバッグ
Playモードで操作ボタンの挙動を確認
- 前方に壁がある場合 → Forwardボタンが非表示
- 壁がない場合 → 前進可能
🛠トラブル時のチェックポイント
- Rayの距離(Check Distance)を調整
- 壁レイヤーが正しく設定されているか。

まとめ
今回は、リジッドボディやキャラクターコントローラーを使わずに、スクリプトでプレイヤーを前進・回転させ、壁判定とUIボタンを連携させる方法を解説しました。
次回は、Rayの可視化やプレイヤーアニメーションの追加方法を紹介し、迷路ゲームの動きにさらにリアリティを持たせます。
✅次の記事はこちら👇




コメント