技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

iPhoneX以降のセーフエリアの見栄えをエディタ上で、かつ実行せずに確認・調整できる便利クラスを作成しました

概要

UIがiPhoneX以降のセーフエリア(Safe Area)内にちゃんと収まるような調整クラスを作成しました。
とはいえ毎回端末で確認するのも嫌だったので、エディタ上で実行せずとも直接確認できる機能も追加してみました。(実行中に適応する機能もあります)
こんな感じです↓ 縦向き・横向きどちらも対応してます。
f:id:Goropocha:20200326002846g:plain
f:id:Goropocha:20200326002848g:plain

対応端末

iPhone X, iPhone XS, iPhone XR, iPhone XS Max, iPad Pro 11, iPad Pro 12.3 (3rd generation)

コードとサンプル

実際のコードとサンプルプロジェクトを用意しました。
UnityPackage版も一緒に置いてあります。アプリ開発者の方はぜひ使ってみてください。
サンプルプロジェクトの開発バージョン: Unity 2018.3.13f1
https://github.com/Goropocha/UniSafeAreaAdjuster

バージョン情報

1.1.0

  • iPad Pro 11, iPad Pro 12.3 (3rd generation)に対応しました
  • 2018.3.3 にて、iOSだと Screen.SetResolution() をした際のScreen.safearea挙動バグが修正された関係でレイアウトがおかしくなる問題を修正しました
  • 2018.3.2以前のバージョンを利用している方は、 SafeAreaAdjuster.cs の1行目の定義 Unity2018_3_2orOlderコメントアウトを解除してください。

1.0.0

  • リリース

使い方

UI画面作成方法

UI画面作りについては以下のように設定してください:

  1. GameScreenの解像度に、確認したい端末の解像度を追加する。(Unity 2018.3以降または既に手動で登録済みの場合は省略可)
    筆者の環境では以下のように各端末の解像度を追加してます。
    アスペクト比指定だとうまくいかないので注意してください。
    f:id:Goropocha:20200326002852p:plain
  2. Canvas直下に、セーフエリア内に収めたいUIをまとめるための親ゲームオブジェクトを作成し(下図の SafeArea ゲームオジェクトです)、そこに SafeAreaAdjuster.cs をアタッチします。
    f:id:Goropocha:20200326002853p:plain
  3. SafeAreaゲームオブジェクトのRectTransformは下図のように全体に広げておくようにします
    f:id:Goropocha:20200326002855p:plain

あとは端末だと勝手にセーフエリアのサイズに調整してくれます。

スクリプトの設定解説

次はSafeAreaAdjuster の設定項目の解説です。
f:id:Goropocha:20200326002900p:plain

項目 解説
Is Auto Scale アタッチされたゲームオブジェクトのRectTransformのスケールをセーフエリアに合わせて縮小します。
画面全体のレイアウトを維持したままセーフエリアに適応させたいときはチェックします。
Simulate On Play エディタ上で実行した際に適応したい場合はチェックします。デフォルトではオンになっています。
端末で実行した際は無視される項目です。
Simulate Type シミュレートしたい機種を選択します。
端末で実行した際は無視される項目です。
Is Portrait 縦持ちの場合はチェックします。
下項目の「Editor上で即シミュレート」用のためのものなので、エディタと端末両方とも実行した際は無視される項目です。
Editor上で即シミュレート チェックを入れるとすぐに反映してくれます。
端末で実行した際は無視される項目です。

開発余談

UnityEngine.Screen は残念ながら実行時にしか設定した解像度が反映されないため、仕方なく端末の解像度をハードコーディングした。
とはいえ、端末サイズが発売後に変わったことは無いので別に問題はないかも。

参考サイト