前提・実現したいこと
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 です。
ズーム機能のスクリプトが足を引っ張っていそうな気がするので、これを削除した状態で(またはソースコードを自作してシンプルな作りにして)検証してみてください。あと「Scene2にMain Cameraを入れても外しても結果は同じ」とのことですが、不慮の誤動作の原因になりそうなのでオブジェクトごと削除しておいた方がいいと思います。
一旦Mobile Touch Cameraを外した状態で例1、例2のコードを試してみてください。特に例1は「Scene1とScene2が同時に出る」というのが謎挙動なので、外して正常に動作するならアセットのせいと絞り込めます。 また、BitBenderGames冒頭を見る限り関係していなさそうですが、一応コード内に「SceneManagement」という記述があるか検索してみてください。(もしかしたら「シーンロード中は反応しない」的な分岐があるかもしれません。もしあったらその辺のコードで何をしているのか調べてみてください)
「例1は「Scene1とScene2が同時に出る」というのが謎挙動」とのことなのですが、例1のコードに問題がないのであれば、追加ロードがうまくいかない原因としては他にどんなことが考えられるのでしょうか。よくあるケースなどがあれば教えてください。よろしくお願いします。
追加ロードがうまくいかない原因で考えられるとしたら、Scene2が軽くて一瞬で読み込まれていることでしょうか。(例1:Scene1が重いのでロード時間がかかる→Scene1読み込み直後にScene2読み込み開始→Scene2は軽くて一瞬で読み込み終了)(例1Awake時:ズームスクリプトの影響でロードがキャンセルされてる?) ただこの場合、例2で「数秒」かかる理由と矛盾するので正直よく分かりません(待たされる時間が0.5秒なら分かるのですが)。
ありがとうございます。Scene2はScene1より何倍も大きいので読み込みには時間がかかると思います。このコードをベースに色々な設定を変えたりして試してみたいと思います。
あなたの回答
tips
プレビュー