【開発者向け】UnityでスマホのLandscapeLeft/LandscapeRightを識別する
唐突に技術系の記事を上げてみる。たまには人の役に立ちたい。QiitaやZennのアカウントは持っていないし、必要な人はググるだろうからnoteに書いても届くよね。
目的
スマホの横画面には左90度回転と右90度回転の2種類がある。これを識別して左利き用と右利き用にUIを切り替えたい。
結論
Screen.orientationをUpdate関数などで監視すればいい。公式ドキュメントは説明が足りていないが、読み出し時は現在の画面の向きが返される。
ScreenOrientation.AutoRotationはセット専用。
その他の方法
結論に辿り着くまでに色々試したのでネガティブキャッシュとして残しておく。
Screen.widthとScreen.heightを監視する
widthよりheightのほうが大きければ横画面であると判定できる。当然、左回転なのか右回転なのかを識別することはできないので却下。
Input.deviceOrientationを監視する
画面の向きではなく端末の向きを取得するためのAPIだと思われるが、iOSだと画面の向きが返される。なのでiOS専用なら今回の目的に使えないこともない。
逆に端末の向きを知りたいケースで使えないような。
ネイティブプラグインを実装する
ポーリングせずに画面の回転を検出できる。
が、どう考えても実装コストに見合わない。
iOS
UIDevice.orientationDidChangeNotificationで画面の回転を検出する
UIDevice.current.orientationで現在の向きを取得する
Android
DisplayListenerで画面の回転を検出する
Display.rotationで現在の向きを取得する
まとめ
ネイティブプラグインを実装する必要なんてなかったんだ……