UnityでiPhone用アプリを作ってAppStoreで公開しようと思った時にスクショ関連で手間取ったのでメモを残します。
[toc]Xcodeシュミレータでスクショ撮影は手間がかかる
Unityでアプリを作った場合には、プロジェクトをXcode用にビルドする必要があります。
AppStore Connectで審査に出す場合に必要なのがスクリーンショットです。
- 5.5インチ(iPhone 8 Plus)
- 6.5インチ(iPhone 11 Pro Max)
- 12.9インチ(第3世代iPadPro)
3つのサイズが必要になるのですが、Xcodeでシュミレータを起動して撮影するのは面倒でした。
- デフォルトではUnityからビルドしたプロジェクトはXcodeのシュミレータで起動できない
- 「シュミレータSDK」を選択してビルドすればシュミレータで起動できるがビルドに時間がかかる
- Xcodeでレイアウトズレが発覚した場合にはUnity側で修正しなければならない
と、いろいろ問題がありました。
レイアウトズレを修正する方法
私は5.8インチのiPhoneXの解像度を設定して開発していたのですが、5.5インチ、12.9インチで動かした時にレイアウトのズレが発生しました。
アスペクト比が変わるとレイアウトズレが起こりやすいので注意が必要です。
Unityでは様々なデバイスの解像度やアスペクトに対応できるように設定項目があります。
Canvasに以下の設定をするとレイアウトズレを解消できました。
- UI Scale Mode : Scale With Screen Size
- Reference Resolution : 開発画面の解像度
- Screen Match Mode : Expand

Unityでスクショを撮影する方法
Unityは画面解像度の変更がGame画面のところから設定できます。
iPhone 8 PlusとiPhone 11 Pro Maxの画面解像度が無かったので、+ボタンで追加してみました。

これでゲームを実行する時に切り替えればそれぞれの解像度でゲームをプレイすることができます。
エディタ上でスクショを撮影するスクリプト
Assetsの中にEditorフォルダを作り以下のスクリプトを配置します。
using System; using System.IO; using UnityEngine; using UnityEditor; public class Scsho : MonoBehaviour { [MenuItem("Tools/Screenshot %F3", false)] public static void CaptureScreenshot() { //プロジェクト名を取得する string productName = Application.productName; //デスクトップにプロジェクト名のフォルダを作るようにする。 string directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), productName); //ファイル名を指定する。 DateTime now = DateTime.Now; string fileName = string.Format("{0}_{1}x{2}_{3}{4:D2}{5:D2}{6:D2}{7:D2}{8:D2}.png", productName, Screen.width, Screen.height, now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second); string path = Path.Combine(directory, fileName); //ディレクトリが存在していなかったらディレクトリを作成する。 if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } //スクショを保存する ScreenCapture.CaptureScreenshot(path); Debug.LogFormat("Screenshot Saved : {0}", path); } }
UnityのToolsメニューからスクリーンショットが撮影できるようになります。
ちなみに、Editorフォルダに配置しないとBuild時に下記のエラーが出ます。
The type or namespace name ‘MenuItemAttribute’ could not be found