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

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

ただいまの
回答率

87.77%

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,017

score 15

 前提・実現したいこと

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 です。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • dragontown

    2018/10/27 13:29

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

    キャンセル

  • sakura_hana

    2018/10/29 10:39

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

    キャンセル

  • dragontown

    2018/10/30 22:43

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

    キャンセル

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

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

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る