Unity5になって4まででProじゃないと使えないらしかった”LoadLevelAsync()”。
もしかして使えるのかなーとか思い触ってみました。
途中でシーンが変わってしまうLoadLevelAsyncだと最終結果を見届けられなかったので、
LoadLevelAdditiveAsync()を使ってます。
IEnumerator Start ()
{
AsyncOperation async = Application.LoadLevelAdditiveAsync( "demoadd");
//async.allowSceneActivation = false;
do
{
Debug.Log( "progress: " + async.progress + "isDone: " + async.isDone );
yield return new WaitForEndOfFrame();
}
while ( async.isDone == false );
Debug.Log( "Loading complete");
Debug.Log( "final progress: " + async.progress + "isDone: " + async.isDone );
//async.allowSceneActivation = true;
}
allowSceneActivationについては、画面の遷移を許可するか?っていう意味かなーという認識です。なので、
●遷移を前もって許可しないでおく
↓
●ロード進捗OKッス!(・ω・).oO(progress >= 1.0f or isDone == true になるんだろ?ぐへへ)
↓
●シーン切り替えに当たっての演出的な何か
↓
●演出終わったし遷移を許可するか(allowSceneActivation = true)
↓
●遷移デケター
っていう感じかなーと思ってました。
英語に自信無いニキなので、公式リファ見てください…
Unity - Scripting API: AsyncOperation
まぁ、上のような妄想をしてとりあえずallowSceneActivationは触らずやった結果。
[allowSceneActivation:コードOFF]
progress: 0isDone: False
progress: 0.9isDone: False
Loading complete
final progress: 1isDone: True
結果:シーン追加されたー!やっほい!
では本題。
[allowSceneActivation:コードON]
progress: 0isDone: False
progress: 0.9isDone: False
progress: 0.9isDone: False
progress: 0.9isDone: False
progress: 0.9isDone: False
...
結果:何時まで経ってもロードされねぇ。
なん…やて…
Qiita内に以下のエントリがありました。
C# - Unity3DのLoadLevelAsyncとAsyncOperationで非同期ロードを待ってみる - Qiita
0.9でとまるのはそういうもの、ということなんですかね。
APIの説明でも
【Has the operation finished?】
『処理が完了したか?』という意味だと思うのですが、
処理が完了したか?(ロード可能な時点でtrueになるとは言っていない)
っていうことなのかなー?
自分の結論としては
progress < 0.9 : 読み込み中
else : ロード完了
という認識になりました。
実際0.9になった後にallowSceneActivation = trueにしてロードしても問題出てないからまぁ・・・?