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

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

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

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

Unity

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

Q&A

1回答

860閲覧

【Unity】InputFieldで入力した任意のシーンに移動したい

soheil

総合スコア12

C#

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

Unity

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

0グッド

0クリップ

投稿2021/07/05 04:52

Unityにて入力した名前のシーンに遷移できるような機能を考えています。
(今後用意するシーンの量が多くなることが予想されるため)

そこで、InputFieldで値を取得し、同じ画面内に用意したボタンのOnClickイベントで指定のシーンに飛ばしたいのですがうまく実装ができません。
どのようにしたら実装できるでしょうか。また、大量のシーンの中から選んで任意のシーンに移動する他の方法がありましたらご教授ください。

なお、現在以下のようなスクリプトを用意したのですが、エラーが出てしまっています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class SceneStarter : MonoBehaviour 8{ 9 public InputField inputField; 10 void Start() 11 { 12 inputField = inputField.GetComponent<InputField> (); 13 } 14 15 public void LoadScene(){ 16 string scene = inputField.text; 17 SceneManager.LoadScene(scene); 18 } 19} 20

Console

1Assets/Scripts/SceneStarter.cs(17,22): error CS0117: 'SceneManager' does not contain a definition for 'LoadScene'

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

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

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

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

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

guest

回答1

0

エラー内容についてはFile > Build SettingsからScenes In Buildに該当のSceneを含めてください。

直接入力がめんどくさいならScene In Buildから引っ張ってしまうという手もあるかと思います
これなら有効なSceneがListで取得できるので、たとえばドロップダウンとかに追加すればより使いやすいUIになると思います

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class Test0705 : MonoBehaviour { 8 public InputField inputField; 9 void Start() { 10 inputField = inputField.GetComponent<InputField>(); 11 12 // ----------------------------------------------------------- 13 // Scene In Build からScene一覧を引っ張ってくるサンプル 14 // ----------------------------------------------------------- 15 List<string> scenesInBuild = new List<string>(); 16 17 //sceneCountInBuildSettingsはScene In Buildに登録されているSceneの数 18 for (int i = 0; i < SceneManager.sceneCountInBuildSettings; i++) { 19 string scenePath = SceneUtility.GetScenePathByBuildIndex(i); // 登録Sceneを上からパスを引っ張っる 20 21 // パスから名前部分のみを取り出す(/と.で区切る) 22 int lastSlash = scenePath.LastIndexOf("/"); 23 scenesInBuild.Add(scenePath.Substring(lastSlash + 1, scenePath.LastIndexOf(".") - lastSlash - 1)); 24 } 25 26 foreach(string s in scenesInBuild) { 27 Debug.Log(s); // Scene名を全部出力 28 } 29 30 // ----------------------------------------------------------- 31 } 32 33 public void LoadScene() { 34 string scene = inputField.text; 35 SceneManager.LoadScene(scene); 36 } 37 38 39}

投稿2021/07/05 05:22

hogefugapiyo

総合スコア3302

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

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

soheil

2021/07/05 06:54 編集

ご回答ありがとうございます。なるほど直接入力以外だとListを使ったドロップダウンなどがあるんですね。 しかし例えばシーンが100個近くになるとドロップダウンからでも選択しにくいように感じたので今のところ直接入力の方が実用的なのかと思います。 また、シーンについては全て【Scenes In Build】に入っているのにエラーが出てしまっている状態でした。説明不足ですいません。 例えば、ご提案いただきましたスクリプトだと下の【SceneManager.LoadScene】の部分だけでなくfor文の【SceneManager.sceneCountInBuildSettings】の部分にもエラーが吐かれてしまっているようです。これはSceneManager自体が機能してない?ようなのでどこか定義し忘れている部分などがあるのでしょうか。 追記:SceneManagerをUnityEngine.SceneManagement.SceneManagerと記述することで動作しました。using部分の記述は間違っていない?はずなので原因は分かっていません。
hogefugapiyo

2021/07/05 07:29

SceneManagerっていう名前のスクリプトがあったりしますか? 名前被ったのがあるとどっちを参照すれば良いかわからずにエラーが出ます。 UnityEngine~でフル指定すると動作するならおそらく名前被りの疑いがあります
soheil

2021/07/05 12:24

作ってました!該当スクリプトを削除することで正常に機能するようになりました。助かりました...!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問