前提
https://qiita.com/tkyaji/items/8cdc0a4324d4e89633e8
を参考に、UnityIPhoneXSupport_Portrait.unitypackage をインポートすること
問題点
Screen.orientation = ScreenOrientation.Portrait
処理のあと、iphoneXのノッチ対応が無効になってしまう
対策
Screen.orientation = ScreenOrientation.Portrait
を行う前に、
QualitySettings.vSyncCount = 0;
を実施し、その1フレーム後に
Screen.orientation = ScreenOrientation.Portrait
を処理するように
分析
①
Q:どうして UnityIPhoneXSupport_Portrait.unitypackage に上記の問題がありますか?
A:このソースを適用することで、iphoneXのノッチ問題は余白と高さ(height)の調整が解決されますが、この調整はUnityが起動した直後のみ実施されるため、それ以降の処理で、もし余白と高さ(height)が他の処理で変わったら、ノッチ対応が無効になってしまいます。
②
Q:どうしてQualitySettings.vSyncCount = 0で問題を解決できますか?
A:vSyncCount = 0で画面の垂直同期をOFFにすることが出来ます。普段この垂直同期がONの状態で、Screen.orientation = ScreenOrientation.Portraitなどの処理で、①で説明した余白と高さなどが再計算されますが、OFFにすることで再計算されなくなります。
備考
・垂直同期をOFFにしてノッチ対応が無効になる問題を解決しましたが、OFFにすることで他の問題が起きるかはまだ分かりません。使用する場合は自己責任でお願いします。
・急ぎでない場合、UnityIPhoneXSupportでiphoneXノッチの対応をするのはあまりお勧めできません。
UnityIPhoneXSupportはビルト後のソース置き換えで対応しているため、unity本来の機能のsafeArea取得がこのソース置き換えにより、Screen.safeArea.heightの値がScreen.heightと同じ値になってしまいます。
safeAreaを使った判定が無効になるため、予想できない問題が起きる恐れがあります。
参考資料
https://qiita.com/tkyaji/items/8cdc0a4324d4e89633e8
https://ameblo.jp/sugawara-monolizm/entry-11875747245.html