🔍本記事では Rigidbody や CharacterController を使わずに、C# スクリプトだけでプレイヤーを移動させる方法 で立体迷路を作成しています。
今回は 2階や3階など複数フロアの追加、プレイヤーが現在どのフロアにいるかを表示するテキスト、さらに プレイ時間の表示方法 を実装していきます。
✅前回の記事はこちら👇
複数フロアの追加
- 床の設定
各フロアの「床」オブジェクトはコライダーを設定せず、見えるだけにしてOK。 - 壁と階段の設定
2階以上の壁や階段には、それぞれ専用のレイヤーを設定。
壁や階段には Mesh Collider を追加する。 - 階段の制御
階段の登り口以外は壁にしておくことで、プレイヤーが不自然な場所から降りないようにする。

現在のフロアをUIに表示する
UIパネルにテキストを追加
- ヒエラルキーで
Canvas→UI → Text (TextMeshPro)を追加。 - インスペクターで初期テキスト、FontSize、位置を調整。
フォントを導入する手順
- Google Fontsなどから任意のフォントをダウンロード
- Unity の
Assetsフォルダにフォントをドラッグ&ドロップ Window → TextMeshPro → Font Asset Creatorでフォントアセットを生成- 生成したフォントアセットを TextMeshPro テキストの Font Asset に設定
スクリプトを追加する
using TMPro;
public TextMeshProUGUI floorText;
public float floorHeight = 2f; // 1階の高さ(2m)
void Update()
{
UpdateFloorText();
}
void UpdateFloorText()
{
if (floorText == null) return;
int floor = Mathf.RoundToInt(transform.position.y / floorHeight) + 1; // 1階始まり
floorText.text = floor + “F”;
}
インスペクターで設定
Playerのインスペクターに FloorText をアタッチ。- 実行(Play)して、階層の高さに応じて正しく表示されるか確認。
座標がずれる場合の調整
もしフロア表示が実際の高さとずれる場合は、基準座標を調整します。
public float baseFloorY = 1f; // 1階の基準高さ
void UpdateFloorText()
{
if (floorText == null) return;
float relativeY = transform.position.y – baseFloorY;
int floor = Mathf.RoundToInt(relativeY / floorHeight) + 1;
floorText.text = floor + “F”;
}
プレイ時間をUIに表示する
UIテキストを追加
- 先ほど作った FloorText を複製し、「TimeText」にリネーム。
- 初期テキストや位置を調整。
スクリプトを追加する
public TextMeshProUGUI timeText;
private float playerTime = 0f;
void Update()
{
UpdatePlayTime();
}
void UpdatePlayTime()
{
if (timeText == null) return;
playerTime += Time.deltaTime;
int minutes = Mathf.FloorToInt(playerTime / 60f);
int seconds = Mathf.FloorToInt(playerTime % 60f);
timeText.text = string.Format(“{0:00}:{1:00}”, minutes, seconds);
}
インスペクターで設定
Playerのインスペクターに TimeText をアタッチ。- Play 実行して、時間が加算されるか確認。
まとめ
今回は以下を実装しました👇
- 複数フロアを追加して、2階・3階の構造を作る方法
- 現在のフロアを TextMeshPro のUIに表示する方法
- プレイ時間を計測してUIに表示する方法
これで「立体迷路ゲーム」としての遊びやすさがぐっと増します。
👉 次回は ポーズやリスタート機能の追加 について解説していきます。




コメント