FC2ブログ
    08 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】シーン移動の際に、次のシーンが重いとき。ローディング画面的なのをかましたくなりますよね?そのやり方。 

    こんにちは!坂内っす。
    熱い!暑い!夏ですね!梅雨もあけました。
    熱射病、日射病にお気をつけをば。

    Unityでローディング画面とか作ってみましょう。
    次のシーンに移動する際に、次シーンのロード(始めに色々ロードとかすると長いよね)が長くて、「タップしたのにシーン移動しないよー」って時に、簡単なロード画面を挟む方法。

    ①初期画面(StartSceneシーン)でボタンを押す
    ②シーン移動
    ③次画面(NextSceneシーン)で音楽データ(4曲)、画像データ(1枚)を読み込んでメモリにいれて、画面に表示する。

    あ、そういえばソシャゲ「メギド72」の楽曲無料ダウンロードとかのイベントやってるんですね。
    https://app.famitsu.com/20180702_1318019/

    あ、メギドやったことないっすけどね。

    ってことで、4曲遊びで落としてみたのを、読み込んでみます。



    1ファイル1ファイルがでかいっすね。
    あと1枚絵を置いてます。

    コードはこんな感じ。
    【StartScene.cs】(始めのシーンにつけてね)
    using UnityEngine;
    using UnityEngine.SceneManagement;

    public class StartScene : MonoBehaviour {

    public void OnClickNext() {
    SceneManager.LoadScene("NextScene");
    }
    }


    【NextScene.cs】(ボタン押した後に開かれるシーンにつけてね)
    using UnityEngine;
    using UnityEngine.UI;

    public class NextScene : MonoBehaviour {

    public AudioClip[] audios;
    public Image imgTest;
    public Sprite testSprite;

    private void Start() {
    imgTest.sprite = testSprite;
    }
    }



    こんな感じで、曲をアサインしているだけ。



    実際に動かすと、こうなります。

    実際にどれくらいボタンを押してから次シーンが開くまで時間がかかるか試してみましょう。

    PCなのでそれなりに早いですが、スマホだとクリックした後の反応がない。

    こんな時はローディング画面を使うといいですよね。

    まぁ、他のサイトが書いてるので2番煎じになりますが。

    ①ローディング画面をシーン移動の前のシーン(StartScene)につけます。
    ローディング画面にはプログレス用のSliderを付けてます。
    また、ローディング画面ははじめActiveを外しておきます。


    ②StartScene.csをいじります。
    using System.Collections;
    using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.SceneManagement;

    public class StartScene : MonoBehaviour {
    private AsyncOperation async;
    public GameObject loadingSetPref;
    public Slider gage;

    public void OnClickNext() {
    loadingSetPref.SetActive(true);
    StartCoroutine(LoadScene());
    }

    IEnumerator LoadScene() {
    yield return new WaitForSeconds(0.1f);
    async = SceneManager.LoadSceneAsync("NextScene");
    async.allowSceneActivation = false;

    while(async.progress < 0.9f) {
    gage.value = async.progress;
    yield return null;
    }
    gage.value = 1f;
    yield return new WaitForSeconds(1f);
    async.allowSceneActivation = true;
    }
    }



    こんな感じでやれば、ローディング画面ができます。

    では実際に実行してみよう。

    なんかあんまりロード長くないからかもだけど、一応それぽくなりました?
    実機だとちゃんとローディング画面として機能してますよ!



    ってことで、簡単にですが、ローディング画面の作り方でした!

    ではあでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/515-c2f1a908
    この記事にトラックバックする(FC2ブログユーザー)