読者です 読者をやめる 読者になる 読者になる

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時間くらい止まりました。
このことを書いていらっしゃる記事は結構あったので先に調べるべきでした……。


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