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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

3693閲覧

Unity シーンのビルドインデックスについて

ruka--

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2019/07/12 18:10

前提・実現したいこと

Unity でシーン移行を作成しています。ビルドインデックスが「5」のシーンを読み込みたいです。

発生している問題・エラーメッセージ

しかし、シーンを読み込むことが出来ずビルドインデックスを調べてみると-1が読み込まれます。

エラーメッセージ

該当のソースコード

ソースコードusing System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class startbutton : MonoBehaviour { int[] stageclear; int stage = 40; public void Change() { stageclear = new int[stage]; for (int i = 0; i < stage; i++) { stageclear[i] = PlayerPrefs.GetInt("CLEAR_" + i + 1, 0); if (stageclear[i] == 0) { int x = i + 5; Scene current = SceneManager.GetSceneByBuildIndex(x); int n = current.buildIndex; Debug.Log(n); FadeManager.Instance.LoadScene(current.name, 1.0f); break; } } } }

試したこと

ビルドインデックスからシーンを読み込む方法が間違っているのでしょうか。。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

SceneManager.GetSceneByBuildIndex()の公式ドキュメントを確認すると、以下のようにあります。

This method will return a valid Scene if a Scene has been added to the build settings at the given build index AND the Scene is loaded. If it has not been loaded yet the SceneManager cannot return a valid Scene.
(機械翻訳:このメソッドは、指定されたビルドインデックスでシーンがビルド設定に追加され、かつシーンがロードされている場合に有効なシーンを返します。まだロードされていない場合、SceneManagerは有効なシーンを返すことができません。)

そのため、SceneManager.GetSceneByBuildIndex()はロード後に使うものであり、ロード前に使っても上手く動作しないということなのでしょう。

代替え案としては、SceneManager.LoadScene()でのロードはシーン名の代わりにビルドインデックスを使うこともできるので、おそらくそれが使われているであろうFadeManagerをビルドインデックスでもロードできるように改良するとよろしいかと思います。
ただ、私としては、ビルド設定を変えるとずれてしまう可能性があるビルドインデックスよりも、シーン名を使ったほうが分かりやすいのではないかと思います。

投稿2019/07/13 02:11

編集2019/07/13 02:13
fiveHundred

総合スコア9805

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

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

ruka--

2019/07/13 02:22 編集

もしSceneManager.LoadScene()でのロードをビルドインデックスでする場合、引数にSceneManager.GetSceneByBuildIndex(5).nameのように入れたらよいですか?
fiveHundred

2019/07/13 02:26

まず、公式ドキュメントを読みましょう。 > public static void LoadScene (int sceneBuildIndex, SceneManagement.LoadSceneMode mode= LoadSceneMode.Single); とあるので、第1引数をシーン名からビルドインデックスに変更すればよいです。 なお、(仮に出来たとして)SceneManager.LoadScene()の引数にSceneManager.GetSceneByBuildIndex(5)を入れたとしても、SceneManager.GetSceneByBuildIndex(5)→SceneManager.LoadScene()の順番で実行されるため、全く無意味です。 今回の場合は、SceneManager.GetSceneByBuildIndex()は使えないと思っていいでしょう。
ruka--

2019/07/13 03:04

分かりました、ありがとうございます! シーン名ですることにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問