iOSの申請時に必要なキャプチャ画像を作成するUnityエディタ拡張


はじめに

Unityでゲーム更新して、再度iOSのアプリの申請をする際に、いちいち超めんどくさい作業がある。それが。。
ストア表示用に各iOSのキャプチャ画像をとることだあああ!!

いちいち4つもつくるのしんどい!
めんどくさすぎてアップデートしたくない。。

と嘆いていたのですが、
実はこれGameViewのキャプチャを使って申請すれば通ります。
もっと言うと、iPadProの第三世代と第二世代は同じキャプチャでOK。(画面サイズ同じだし)
というわけで、最低限必要な3つのキャプチャを一気にとれるスクリプトを書いてみました。

作り方

以下をありがたく使わせていただき
UnityEditorでコルーチンが使える拡張
ScriptからGameViewSizeを作成、また設定するヘルパークラス
以下を参考に改造していきます。
Gameビューのキャプチャをとる拡張

コード

using UnityEditor;
using UnityEngine;
using System.Collections;
using Kyusyukeigo.Helper;
using UnityExtensions;

/// <summary>
/// iOS申請用のキャプチャを撮るEditor拡張
/// </summary>
public class CaptureScreenshotFromEditor : Editor
{
    // ※使用しているプラットフォームによって変えてください
    const GameViewSizeGroupType TargetGameViewSizeGroupType = GameViewSizeGroupType.Standalone;
    // ※保存先フォルダ。空の場合はプロジェクトの最上層に保存されます。
    const string SaveFolder = "";

    private class GameViewSize
    {
        public string Name { get; private set; }
        public int X { get; private set; }
        public int Y { get; private set; }
        public GameViewSize(string name, int x, int y)
        {
            Name = name;
            X = x;
            Y = y;
        }
    }
    private static GameViewSize[] _screenSizes = {
        new GameViewSize("iPhone_5_5",1242,2208),
        new GameViewSize("iPhone_6_5",1242,2688),
        new GameViewSize("iPad_12_5",2048,2732),
    };

    /// <summary>
    /// キャプチャを撮る
    /// </summary>
    [MenuItem("Edit/CaptureScreen #%F12")]
    private static void CaptureGameView()
    {
        EditorCoroutine.Start(CaptureSequence());
    }
    static IEnumerator CaptureSequence()
    {
        for (int i = 0; i < _screenSizes.Length; i++)
        {
            var size = _screenSizes[i];
            if (!ContainsGameViewSize(size))
            {
                AddCustomSize(size);
            }
            ChangeGameViewSize(size);
            ScreenShot(size);
            yield return null;
        }
        Debug.Log("おわったよ☆");
    }
    // GameViewSizeHelperの引数が多いので、ラッパーを作っておく
    static bool ContainsGameViewSize(GameViewSize gameViewSize)
    {
        return GameViewSizeHelper.Contains(
        TargetGameViewSizeGroupType,
        GameViewSizeHelper.GameViewSizeType.FixedResolution,
        gameViewSize.X, gameViewSize.Y, gameViewSize.Name);
    }
    static void AddCustomSize(GameViewSize gammeViewSize)
    {
        GameViewSizeHelper.AddCustomSize(
        TargetGameViewSizeGroupType,
        GameViewSizeHelper.GameViewSizeType.FixedResolution,
        gammeViewSize.X, gammeViewSize.Y, gammeViewSize.Name);
    }
    static void ChangeGameViewSize(GameViewSize gameViewSize)
    {
        GameViewSizeHelper.ChangeGameViewSize(TargetGameViewSizeGroupType,
        GameViewSizeHelper.GameViewSizeType.FixedResolution,
        gameViewSize.X, gameViewSize.Y, gameViewSize.Name);
    }
    // スクリーンショット本体
    static void ScreenShot(GameViewSize gameViewSize)
    {
        var filename = string.Format("{0}_{1}.png", System.DateTime.Now.ToString("yyyyMMdd-HHmmss"), gameViewSize.Name);
        Debug.Log(string.Format("スクリーンショット! :{0} ", filename));
        ScreenCapture.CaptureScreenshot(string.Format("{0}{1}", SaveFolder, filename));
    }
}

以上