Unityでダンジョンや建物に入る方法メモ。入るボタンを押してシーン遷移など

unity ダンジョン 入り方 Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^_^*)

この記事はUnityでダンジョンや建物に入る方法メモです。

動作させた最終バージョンはUnity 6000.0.32です。

●PRスペース●
■PR■

現在人気商品が最大90%以上オフで買えるAmazonプライム感謝祭先行セールをやってるみたいです(2025/10/10 23:59まで )。

Amazonプライム感謝祭 先行セール開催中 最大90%以上オフ

燃えにくく安全性の高いエレコム ナトリウムイオンモバイルバッテリーがかなり安くなっているので私も買いました。

エレコム ナトリウムイオン モバイルバッテリー

品薄だからか配送まで一ヶ月くらいかかるみたいですが、そろそろモバイルバッテリーが消耗している人におススメです。

エレコム モバイルバッテリー 9000mAh 45W 【世界初】ナトリウムイオン電池 USB PD対応

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

やりたいこと:ダンジョンや建物の前に来たら「入る」UIを表示し、キーを押したらシーン遷移

以前会話システムを作った時にやった感じですね…。

これプレイヤーの機能として組み込んだほうが汎用性はありそうだけど、複数の村人が近くに来た時に見分ける処理も必要になるんですよね…。

スクリプトとしては簡単なヤツなので、とりあえずオブジェクトごとに仕込む感じにしようかと思います。

ChatGPT氏に聞いてみる

とりあえず彼に聞けばいいアイデアを出してくれるだろう…

unity ダンジョン 入る
神部まゆみ
神部まゆみ

フィールドのダンジョンにコライダーを設置しますから、そこに「入る」と表示する機能が欲しいです。キーを押すとシーン遷移します

生成AI
生成AI

了解です!じゃあ今の「話す」UIの仕組みと同じように、ダンジョンの入口にコライダーを設置して、プレイヤーが近づいたら「入る」UIを表示 → キーを押したらシーン遷移する形にしますね。

ダンジョン入口用スクリプト DungeonEntrance.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class DungeonEntrance : MonoBehaviour
{
    public GameObject enterUI; // 「入る(E)」のUI
    [SerializeField] private string dungeonSceneName = "DungeonScene"; // 遷移するシーン名
    private bool canEnter = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player")) // プレイヤーが範囲内に入ったら
        {
            enterUI.SetActive(true);
            canEnter = true;
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            enterUI.SetActive(false);
            canEnter = false;
        }
    }

    void Update()
    {
        if (canEnter && Input.GetKeyDown(KeyCode.E))
        {
            SceneManager.LoadScene(dungeonSceneName);
        }
    }
}

🔧 設置方法

  1. ダンジョン入口に GameObject(Cubeなど)を配置
  2. BoxCollider を「Is Trigger」にする
  3. DungeonEntrance.cs を入口の GameObject にアタッチ
  4. enterUI に「入る(E)」のUIオブジェクトをセット
  5. Player のタグを "Player" に設定
  6. 実行して、Eキーを押すとダンジョンシーンに遷移する

✅ これなら…

  • 村人の会話UIと同じ方式だから管理が簡単
  • 近づいたら UI 表示 → キー押したら遷移のシンプルな流れ
  • ダンジョンの数が増えても、スクリプトを使い回せる

これで「入る」UIを簡単に設置できます!🎮

おお、割と簡単にできそうですね。

シーン遷移は以前やったことがあるから大丈夫かな。

とりあえず「入る」とUIを表示するところまでやる

とりあえずここまでやってみます。

フィールドにダンジョンを配置する

前回洞窟を作ったのであれを利用します。

↓地形は以前作ったので、丘や山の方に配置すればいいかな。

入り口は塞いでおいた方がいいかな。

本当は真っ暗な感じで洞窟の入り口っぽくしたいけどまぁ後で…。

unity ダンジョン 入り方

コライダーを追加してトリガーにする

前回岩を作ったので、これを入り口に配置してスクリプトをアタッチしようと思います。

メッシュコライダーを追加、トリガーにする。

UIを追加して非表示にしておく

これは村人のやつで使ったやつをコピペします。

スクリプトをコピペしてアタッチ

スクリプトをコピペしてアタッチする。

unity ダンジョン 入り方

これで表示できた!

これで表示できましたね。

シーン遷移についての基礎知識

これ気になってたけど、シーンが変わるとプレイヤーは原則別のインスタンス扱いになり、データの保持を考える必要があるっぽい。

まぁ今のところそこまでゲームとして作りこんでいないから、今のところは気にしないで行くけど。

unity ダンジョン 入り方
神部まゆみ
神部まゆみ

例えばフィールドマップにいるプレイヤーがダンジョンに入った場合、フィールドマップにいるプレイヤーを別のシーンのダンジョンにワープさせているのではなく、ダンジョンにいるプレイヤーとはあくまで別のインスタンスになるのでしょうか?

ChatGPT
ChatGPT

結論から言うと、「通常のシーン遷移では、フィールドマップのプレイヤーとダンジョンのプレイヤーは別のインスタンスになる」のが一般的です。
つまり、ダンジョンに入ったとき、プレイヤーが新たに生成される形になるわけです。

🔹 なぜ別のインスタンスになるのか?

Unityのシーン遷移の仕組み

通常の SceneManager.LoadScene("Dungeon") を実行すると、Unity は以下の処理を行います:

  1. 現在のシーン(フィールドマップ)の全オブジェクトを破棄
  2. 新しいシーン(ダンジョン)をロード
  3. ダンジョンシーンに配置されたプレイヤーが新たに生成される

このため、**フィールドマップにいたプレイヤーと、ダンジョンで動くプレイヤーは「見た目は同じでも別のオブジェクト」**ということになります。


🔹 別インスタンスになると困ること

通常のシーン遷移だとプレイヤーが「リセット」されるため、体力や装備、位置情報などが失われる可能性があります。
そこで、プレイヤーの情報を引き継ぐ方法が必要になります。


🔹 別インスタンスになっても問題なく引き継ぐ方法

✅ 方法1:PlayerPrefsでステータスを保存
シーンをまたいでもプレイヤーのステータスを保存できる。

✅ 方法2:GameManagerを使って情報を保持
「どのシーンでもプレイヤー情報を保持するオブジェクト」を作る。

✅ 方法3:プレイヤーを「DontDestroyOnLoad」にして同じインスタンスを使う
通常のシーン遷移ではプレイヤーは破棄されるが、DontDestroyOnLoad を使うと、同じプレイヤーをそのまま使い続けられる。

まぁとりあえず今回は遷移後のシーンにはプレハブ化しておいたプレイヤーを配置する感じにします。

言ってみれば、別シーンではプレイヤーのクローンが引き継ぐような感じですね。

後でDontDestroyOnLoadとかもやってみるかもしれない。

ダンジョンのシーンを新規作成、シーン遷移させる

とりあえずやってみます。

シーンをつくる

まぁとりあえず見栄えは気にせず適当に配置していきますw

プレハブ化したプレイヤーを配置する

前のシーンに戻ってプレイヤーをプレハブ化しておく。

プレハブは、まぁシーンで設定したオブジェクトを使いまわせる便利な機能、くらいに思っておけばだいたい間違いはないと思いますw

ダンジョンのシーンに戻ってプレイヤーを入り口あたりに配置します。

カメラが被るのでデフォルトのメインカメラは削除しておく

TPSゲームだとたぶんプレイヤー用のカメラがあると思うので、デフォルトで配置されてるメインカメラは削除しておきます。

unity ダンジョン 入り方

私はJU TPS3アセットを使っているから新しいシーンでQuick Scene Setupをする必要があったけど、これはアセットによります。

新しいシーンになるのでまたセットアップし直す必要があります。

unity ダンジョン 入り方

スクリプトのシーン名を書き換える

遷移前のシーンに戻り、Dungeon Entranceスクリプトのところの遷移先のシーン名を書き換えます。

洞窟の入り口に設置したやつね。

unity ダンジョン 入り方

シーンをビルド設定に追加しておく

遷移前のシーンと遷移先のシーンを追加しておく。

unity ダンジョン 入り方

これでできた!

これで動作しましたね。

動作しない場合:インプットシステムをBOTH(両方)に変える

今回のスクリプトは古い入力システムのやつを使ってるみたいなので、ここをBOTH(両方)に変えないと動かなかった。

unity ダンジョン 入り方

後で新しい入力システムのやつもやってみます…。

おわりに

案外簡単にできて良かった。

とりあえずこういうのをたくさん作っていけばゲームっぽくなりそうかな…。

まぁもう少しいじってみます(*^_^*)

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