かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

UnityでNowLoading画面

今回作ったゲームはさほど規模が大きくないので
最初に必要なファイルをすべてロードすることにしたのですが、
読み込みの所要時間は2,3秒くらいでした。
その間、フリーズしてるように見えるのもアレなので
よくあるNowLoading画面を作りました。こういうの↓
f:id:kasatanet:20160623225013j:plain

ソースはこんな感じ。
LoadSceneAsyncを使って非同期でロードしておいて、
終わったらシーン移行するという処理です。

    [SerializeField] private Slider _loadingBar;
    private AsyncOperation _async;

	IEnumerator Start () {

        yield return new WaitForSeconds(1);

        //非同期でロード開始
        _async = SceneManager.LoadSceneAsync("Main");

        //シーン移動を許可するかどうか
        _async.allowSceneActivation = false;

        while (_async.progress < 0.9f) //0.9で止まる
        {
            Debug.Log(_async.progress);
            _loadingBar.value = _async.progress;
            yield return 0;
        }
        Debug.Log("ロード完了");
        Sound.PlaySE("ok");
        _loadingBar.value = 1.0f;
        _async.allowSceneActivation = true;

        yield return _async;
    }

ただ、コレは最初上手くいかなくてですね。
ちょっと調べたところallowSceneActivationがfalseだと
async.progressが0.9で止まるみたいなんです。isDoneもtrueになってくれません。
ここで1時間くらい止まりました。
このことを書いていらっしゃる記事は結構あったので先に調べるべきでした……。

##追記
後日調べたところ、
async.progressが0.9で止まるのは仕様みたいです。
不具合じゃなくて良かったー。



余談ですが、中央のローディングバーは
スライダーのつまみ部分を削除したものを使っています。
HPバーとかも簡単に作れて結構便利。