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

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

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

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

Unity

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

Q&A

0回答

428閲覧

UnityでSceneの追加ロード(非同期)がうまくいきません

dragontown

総合スコア16

C#

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

Unity

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

0グッド

0クリップ

投稿2018/10/08 07:14

編集2018/10/18 22:48

前提・実現したいこと

UnityでRPG用の広いマップを作っているのですが、すべて同時に読み込ませようとすると何十秒もかかるので、 初めにスタート付近を表示させて、後から他の部分を段階的に読み込み表示させようと思っています。 追加表示される部分も早ければ早い方がいいです。 スタート付近が表示されて、後のマップを待っている間もカメラのズーム、スクロールができるようにしたいです。

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

マップをいくつかに分割して、それぞれ別のSceneに入れてあり、 現在、Scene1(スタート付近)とScene2で試しています。 初めにScene1を表示させた後、それに繋がるScene2を追加表示させようとして、 非同期の追加読み込み用のコードを作っているのですが上手くいきません。 色々なパターンを試しましたが、この三つのうちのどれかになってしまいます。  ・しばらくしてScene1とScene2が同時に出て、ズームもスクロールもできる。  ・初めにScene1が表示されてズームもスクロールもできるが、   その後、待ってもScene2が出てこない。  ・初めにScene1が表示された後、数秒後にScene2が追加表示されるが、   Scene2が表示されるまで画面のズーム、スクロールはできない。 Scene1だけが初めに表示されて、Scene2が表示される前からカメラのズームやスクロールが有効になるようにするには どうしたらいいか教えてください。よろしくお願いします。 Scene1に入っているものは ・Main Camera  (このMain Cameraには、アセットストアで購入した           Mobile Touch Camera           https://assetstore.unity.com/packages/tools/camera/mobile-touch-camera-43960           でピンチズームやスクロール機能をつけています。) ・初めのマップ ・空のGameObject (以下に例示したスクリプトをこの空のGameObjectにつけています) Scene2に入っているもの ・後から表示させたいマップ

該当のソースコードとその結果

C#

(例1) using UnityEngine.SceneManagement; public class スクリプト名 : MonoBehaviour { void Start() { } void OnEnable() { SceneManager.LoadSceneAsync("Scene2", LoadSceneMode.Additive); } }   (例1の結果)     しばらくしてScene1とScene2が同時に出て、ズームもスクロールもできる。     Startの部分をAwakeにすると、     初めにScene1が表示されてズームもスクロールもできるが、その後、待ってもScene2が出てこない。 (例2) using UnityEngine.SceneManagement; public class スクリプト名 : MonoBehaviour { void Start () { Invoke("ToScene2", 0.5f); } void ToScene2() { SceneManager.LoadSceneAsync("Scene2", LoadSceneMode.Additive); } }   (例2の結果)     Scene1が表示された後、数秒後にScene2が追加表示されるが、     Scene2が表示されるまで画面のズーム、スクロールはできない。

追記

(追記1)10月14日 コメントをいただいていたのに気づくのが遅れました。すいません。 Scene2のMain Cameraは外しました。 また、Scene1のMain Cameraに貼ってあるスクリプトをシンプルにしようとしましたが、 依存関係などもある複雑なもので自分の力では無理っぽいです。 一番上の部分だけを貼ってみます。 読み込みに影響を与えるような箇所というのは、こういう初めの辺りにあったりはしないのでしょうか。 // /************************************************************ // * * // * Mobile Touch Camera * // * * // * Created 2015 by BitBender Games * // * * // * bitbendergames@gmail.com * // * * // ************************************************************/ using System.Collections.Generic; using UnityEngine; using System.Collections; namespace BitBenderGames { [RequireComponent(typeof(TouchInputController))] [RequireComponent(typeof(Camera))] public class MobileTouchCamera : MonoBehaviourWrapped { #region inspector    ~ (追記2)10月19日 返信ありがとうございます。 Mobile Touch Cameraに関しては、 Main Cameraに「Mobile Touch Camera」と「Touch Input Controller」という二つのスクリプトがつく形のようで、 両方とも、コード内で「SceneManagement」というワードで検索しましたがヒットしませんでした。 Scene1のMain CameraからMobile Touch Cameraの二つのスクリプトを外した状態で(例1)、(例2)のコードを試したところ、 (例1)しばらくしてScene1とScene2が同時に表示される。 (例2)Scene1が表示された後、数秒後にScene2が追加表示される。 という結果でした。 Mobile Touch Cameraを外しても(例1)がこういう動きということは、Mobile Touch Cameraは無関係で、 コードやMain Cameraの設定など問題ということでしょうか。

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

Unityのバージョンは 2018.2.9f1 です。

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

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

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

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

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

sakura_hana

2018/10/09 01:57

ズーム機能のスクリプトが足を引っ張っていそうな気がするので、これを削除した状態で(またはソースコードを自作してシンプルな作りにして)検証してみてください。あと「Scene2にMain Cameraを入れても外しても結果は同じ」とのことですが、不慮の誤動作の原因になりそうなのでオブジェクトごと削除しておいた方がいいと思います。
sakura_hana

2018/10/16 01:20

一旦Mobile Touch Cameraを外した状態で例1、例2のコードを試してみてください。特に例1は「Scene1とScene2が同時に出る」というのが謎挙動なので、外して正常に動作するならアセットのせいと絞り込めます。  また、BitBenderGames冒頭を見る限り関係していなさそうですが、一応コード内に「SceneManagement」という記述があるか検索してみてください。(もしかしたら「シーンロード中は反応しない」的な分岐があるかもしれません。もしあったらその辺のコードで何をしているのか調べてみてください)
dragontown

2018/10/27 04:29

「例1は「Scene1とScene2が同時に出る」というのが謎挙動」とのことなのですが、例1のコードに問題がないのであれば、追加ロードがうまくいかない原因としては他にどんなことが考えられるのでしょうか。よくあるケースなどがあれば教えてください。よろしくお願いします。
sakura_hana

2018/10/29 01:39

追加ロードがうまくいかない原因で考えられるとしたら、Scene2が軽くて一瞬で読み込まれていることでしょうか。(例1:Scene1が重いのでロード時間がかかる→Scene1読み込み直後にScene2読み込み開始→Scene2は軽くて一瞬で読み込み終了)(例1Awake時:ズームスクリプトの影響でロードがキャンセルされてる?) ただこの場合、例2で「数秒」かかる理由と矛盾するので正直よく分かりません(待たされる時間が0.5秒なら分かるのですが)。
dragontown

2018/10/30 13:43

ありがとうございます。Scene2はScene1より何倍も大きいので読み込みには時間がかかると思います。このコードをベースに色々な設定を変えたりして試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問