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

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

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

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

Unity

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

Q&A

解決済

1回答

1163閲覧

シーン移動するときにプログレスバーでNowLoading画面を出したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2019/07/14 12:39

編集2019/07/14 12:43

前提・実現したいこと

シーン移動するときにプログレスバーでNowLoading画面を出したい。

発生している問題

プログレスバーは読み込み完了と表示されてから急に動かなくなり、固まってしまう。
しばらく画面が固まった状態が続き、いきなり次のシーンに移動する。

疑問点

読み込み完了と表示されているのにすぐに次のシーンへ行かないのはなぜか。

現在の状態

Scene1にScene2の読み込みを始めるボタンを置いた。
Sene2にはキャラクターを動的に2500体設置する命令を記述したプログラムを関連づけた。

試したこと

下記「Load.cs」ファイルをScene1に関連づけました。

C#

1using System.Collections; 2using UnityEngine; 3using UnityEngine.SceneManagement; 4using UnityEngine.UI; 5 6public class Load : MonoBehaviour 7{ 8 public Text m_Text; 9 public Button m_Button; 10 public Slider m_Slider; 11 12 void Start() 13 { 14 m_Button.onClick.AddListener(LoadButton); 15 } 16 17 void LoadButton() 18 { 19 m_Button.gameObject.SetActive (false); 20 StartCoroutine(LoadScene()); 21 } 22 23 IEnumerator LoadScene() 24 { 25 yield return null; 26 27 AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scene2"); 28 asyncOperation.allowSceneActivation = false; 29 while (!asyncOperation.isDone) 30 { 31 m_Text.text = "Loading progress: " + (asyncOperation.progress * 100) + "%"; 32 m_Slider.value = Mathf.Clamp01(asyncOperation.progress / 0.9f); 33 34 if (asyncOperation.progress >= 0.9f) 35 { 36 m_Text.text = "読み込み完了"; 37 asyncOperation.allowSceneActivation = true; 38 } 39 40 yield return null; 41 } 42 } 43}

下記「Sample.cs」ファイルをScene2に関連づけました。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class sample : MonoBehaviour 8{ 9 10 public GameObject prefabUnityChan; 11 12 13 // Start is called before the first frame update 14 void Start() 15 { 16 17 for(int i=0; i<50; i++){ 18 for(int j=0; j<50; j++){ 19 Vector2 unityChanPosition = new Vector2(i,j); 20 Quaternion q = new Quaternion(); 21 q = Quaternion.identity; 22 Instantiate(prefabUnityChan ,unityChanPosition , q); 23 } 24 } 25 } 26 27 // Update is called once per frame 28 void Update() 29 { 30 31 } 32} 33

仮説

「SceneManager.LoadSceneAsync」はUnityソフトのScene画面でドラッグ&ドロップでステージに設置したリソースだけを読み込み、動的に読み込むリソースまでは読み込んでくれない?
→移動先シーンで動的に読み込むリソースを1つのフォルダにまとめておき、そのフォルダ内のリソースの読み込みも監視する必要がある?

参考サイト

https://www.youtube.com/watch?v=7Vcf7l-Ywi0
https://docs.unity3d.com/ScriptReference/AsyncOperation-progress.html
https://gametukurikata.com/program/nowloading

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

unity = 2018.3.14f1 Personal

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

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

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

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

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

guest

回答1

0

ベストアンサー

データをStartで読み込んでいるのなら、LoadSceneAsyncが終わってシーンが移動した後の話なので、
そこまでは面倒見てもらえないと思います

投稿2019/07/15 13:11

izmktr

総合スコア2856

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

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

退会済みユーザー

退会済みユーザー

2019/07/15 14:31

ご回答ありがとうございます。 シーンに関連づけられたプログラムの中のstart部分は見てくれないとなると、 逆に言えばSceneManager.LoadSceneAsyncはシーンの何を読み込むものなのでしょうか? https://docs.unity3d.com/2018.4/Documentation/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html に 「Loads the Scene asynchronously in the background.」とあり翻訳すると 「バックグラウンドでシーンを非同期にロードします。」とのことですが、 シーンをロードといってもシーンの「何を」ロードするのかが分かりませんでした。 プログラムで動的に読み込むものはロードしてくれなくて、Unityソフト編集画面のHierarchyウィンドウに表示されたもの(静的なもの)だけを読み込むということなのでしょうか?
izmktr

2019/07/15 14:32

そういうことになります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問