質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3399閲覧

Unityでシーンをまたぐ際に必要な情報も引き継ぎたい

YUTO_IT

総合スコア16

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/06/16 07:25

お世話になります。
Unity開発初心者のものです。

現在3Dゲームを開発しており、いくつかの場所をシーンごとに分割して実装しております。
(例えば、スタート画面・フィールド・村・屋内 など)

その中で、シーンを移動した際移動元のシーンで設定した変数の値を移動先に引き継げるようにしたいです。
(例えば、天候・時間・アイテムなど)

「DontDestroyOnLoad 関数」を利用して引き継げるようにする方法も試したのですが、引き継ぐために自動生成されるオブジェクトがシーンの移動ごとに増えるため、負荷が心配です。

この手の実装方法について、おすすめな方法があればご教示いただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

若干補足させてください

DontDestroyOnLoadがわりと広く個人開発者では使われている人が多いのですが、そこで紹介されている、Singletonパターンがよくつかわれるのは、まず理解しやすく、実装しやすく、アクセスするのが手軽であるからです。

ただし、Awake()時のオブジェクトを一つに保証しようと処理をする関係で(本来のSingletonはオブジェクトにAwake時につくるものではない) でたとえばそのゲームオブジェクトAwakeが呼ばれる前に参照しようとすると問題になったりすることがあります。また、引きついだ他のシーンはそのオブジェクトに依存する場合、テスト等がややこしくなったりします。 プレハブ化したりするとかなりやっかいな問題になることも多々あります。

最近では、SceneManagerを上手につかい、まずManagerSceneを最初に起動しておいて、そこから、 SceneManager.LoadSceneAsync(nextScene, LoadSceneMode.Additive)で、ManagerSceneに追加シーンをロード、そこで、引き継ぎの処理を書いて、SceneManager.UnLoadAsync(prevScene)みたいなことが方法が取られていることも多くなっています。

なので、DontDestoryOnLoadはとSingletonはよくつかわれているけれども、ベストではないことも頭に入れておかれると、良いと思います。

投稿2021/06/16 18:04

nobkz

総合スコア320

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

DontDestroyOnLoadはほぼ正解だと思います。
そこから少し拡張してSingleton(シングルトン)というデザインパターンをお使いいただくと良いかと思います。

名が表すとおり、Scene遷移しても維持したいが、そいつは必ず1つだけいて欲しいというときに使います。
人によっては音を管理するシングルトンクラスを作って、どのSceneでもかんたんに音が鳴らせるように管理したりと、色々な使いみちがあります。

Unity 2Dアクションの作り方【ゲームマネージャーを作ろう】
https://dkrevel.com/makegame-beginner/make-2d-action-game-manager/

【Unity】シングルトンを上手く活用しよう
https://www.hanachiru-blog.com/entry/2018/09/26/010232

シーン遷移してもひとつだけ残すオブジェクトを作成する(シングルトン)
http://negi-lab.blog.jp/GameController_Singleton


ちなみにRuntimeInitializeOnLoadMethodと組み合わせるとゲームオブジェクトにアタッチしておく必要すらなくなります。仕様をきちんと理解して使うと便利なのでそちらも確認してみてください。

【Unity】ゲーム中に常時必要なGameObjectがどのシーンから始めても存在するようにしてみよう
https://www.urablog.xyz/entry/2018/02/11/164734

投稿2021/06/16 08:04

編集2021/06/16 08:12
hogefugapiyo

総合スコア3302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUTO_IT

2021/06/16 12:10

hogefugapiyo様 ご連絡ありがとうございます。 丁寧にご説明いただいたおかげで、無事移動先に情報を引き継ぐことができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問