Unityでポーズ移行時にポーズ画面を表示させたい[iOS]
解決したいこと
UnityでOnApplicationPauseが呼ばれるタイミングでUIを表示させたいです。
例えば、iOSでタスク一覧を表示させるときに、ポーズ中のような画面が表示されればOKです。
エディタの方では確認ができるのですが、iOSにビルドした際にうまく表示されません。
テスト環境
- Unity2020.3.9f1
- xcode12.5
- iPhone12 Pro
- iOS14.6
該当するソースコード
public GameObject ui;
private void OnApplicationPause(bool paused)
{
Debug.Log("paused: " + paused); // ここはうまくいく
ui.SetActive(paused); // ここはうまくいかない
}
自分で試したこと
SetActiveではなくenabledに変更したり、activeにするタイミングをUpdateに変えたりしましたが、同じように表示されませんでした。
一方で、Debug.Log()
についてはちゃんと表示されているため、OnApplicationPauseが呼ばれていないわけではないと思われます。
また、OnApplicationPause()
がtrueで呼ばれたときだけSetActiveした場合にはポーズ中には何も起きないですが、画面に復帰したときにはちゃんとUIが表示されました。
これらの関係から、推測ですが、Updateなどゲームループのタイミングと描画のタイミングがずれているためこのような問題が起きているのではないかと思われます。もしくは、描画するタイミングの前にアプリ側で描画を停止している可能性もあります。
iOSのライフサイクルで言うとapplicationWillResignActive
のタイミングでOnApplicationPause
が呼ばれます。またUnityの仕様からOnAppicationPause
を呼んだ後に一度だけUpdateが呼ばれることを確認しています。
iOSのPlayer Settingsの方でRender Extra Frame on Pause
をtrueにしたりfalseにしたりしましたが、どちらも結果が変わらずでした。
代わりにOnApplicationFocus()
を試してみましたが、挙動は変わりませんでした。
androidやPCビルドでどうなるかはまだ確認をしていません。
もし今までUnityでこのようなポーズ画面を作成したことがある方がいれば、この解決方法もしくはよりよいポーズ画面の実装についてご教授願いたいです。