見出し画像

【開発者向け】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

    1. UIDevice.orientationDidChangeNotificationで画面の回転を検出する

    2. UIDevice.current.orientationで現在の向きを取得する

  • Android

    1. DisplayListenerで画面の回転を検出する

    2. Display.rotationで現在の向きを取得する

まとめ

ネイティブプラグインを実装する必要なんてなかったんだ……

実際に右向きと左向きでレイアウトを切り替えたアプリがこちら