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

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. キーボードのスペースボタンを押す

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

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

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

エディタ上でスクショを撮影する(追記)

Unityエディタのメニューからスクショを撮る方法が紹介されていました。

下記のスクリプトをコピーしてAssetsフォルダに入れると画像のように、Unityエディタのメニューの中にスクショ撮影メニューが表示されます。

https://gist.github.com/YuminekoGame/1c04b65c7f5e097cb9c7d6496422f3ef#file-screenshotgenerator-cs

とても便利なスクリプトなので使わせてもらっています。

ちなみに上記のスクリプトはどこに配置してもいいわけではなくEditorフォルダを作ってその配下に入れておきましょう。

“Assets/Editor/ScreenShotGenerator.cs”

そうしないとBuild時に下記のエラーが出ます。

The type or namespace name ‘MenuItemAttribute’ could not be found

参考URL

https://nekojara.city/unity-screenshot

https://blog.yumineko.com/unity-editor-screenshot/