【Unity】スマホ画面のスクリーンショットを撮影する方法

UnityでiPhone用アプリを作ってAppStoreで公開しようと思った時にスクショ関連で手間取ったのでメモを残します。

Xcodeシュミレータでスクショ撮影は手間がかかる

Unityでアプリを作った場合には、プロジェクトをXcode用にビルドする必要があります。

iTunes 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の画面解像度が無かったので、+ボタンで追加してみました。

これでゲームを実行する時に切り替えればそれぞれの解像度でゲームをプレイすることができます。

スクリーンショットを撮影するコード

Unityにはスクショを撮影する機能がありませんのでコードを書く必要があります。

ファイル名が他のものと被らないようにするために時間を取得することにしました。

ファイル名を時間にするためには以下のライブラリをインポート。

フレーム毎に以下の処理を走らせます。

  1. 上記のスクリプトをアタッチ
  2. ゲームを開始
  3. キーボードのスペースボタンを押す

でスクショが取れるようになります。

シーンが複数ある場合には、各シーンのオブジェクトにスクリプトをアタッチしないといけませんので注意ください。

撮影したファイルはプロジェクトのルートディレクトリに配置されます。

参考URL

【Unity】スクリーンショットを保存する:https://nekojara.city/unity-screenshot