【Unity】指定した解像度のスクリーンショットを実機なし・エディタだけで撮る方法【2017.1対応】

# はじめに
Unityで作ったアプリをiTunes Connect（iTC）にアップロード、「さぁ審査提出だ！」と思ったら、iPad用のスクショを撮ってなかった。そもそもiPadなんて持ってないしシミュレータ用にビルドしてスクショを撮るのは
めんどくさい
コンパイルに時間的なコストがかかるうえに貧弱なマシンだとシミュレータもまともに動かない。ムダなこと💩のごとし。

# 既存のやり方コピペでいけるっしょ→いけない

すでに有用なエディタ拡張があることを教えてもらいTry。

Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張
https://qiita.com/dj_kusuha/items/13a68474edfd78e41b82

これで撮ったら変なのが撮れた。
<img width="1024" alt="スクリーンショット 2017-10-30 20.51.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/27863/0fe9a353-bd36-e06b-a191-f470212a3538.png">

* 写ってる画面がなぜか小さい
* タブとかウィンドウ全部入りになってる

どうやら`ScreenCapture.CaptureScreenshot`（そもそもApplication.CaptureScreenshotは使えなくなった）の仕様が変わったらしい。マジ卍。

# `Texture2D.ReadPixels`でできた
`ScreenCapture.CaptureScreenshot`を使わずに、カメラに写ってるものをテクスチャ化する`RenderTexture`を内部的に使うらしい`Texture2D.ReadPixels`で書き換えたらうまくいった。

# 撮り方

## 1. Gameウィンドウで解像度を指定する
こんな感じ
![スクリーンショット 2017-10-30 21.32.54.png](https://qiita-image-store.s3.amazonaws.com/0/27863/586af4dd-f4fc-c618-0c3f-2922e788fbe6.png)

## 2. エディタ拡張を書いてスクショを撮る
以下のスクリプトを`Editor`以下に入れて`Ctrl + Shift + F12`で呼び出すorメニューから実行する。
エディタ拡張でコルーチンを使うために [UniRx](https://github.com/neuecc/UniRx) を使っているので入れてください。

```CaptureScreenshotFromEditor.cs
using System.Collections;
using UniRx;
using UnityEditor;
using UnityEngine;

/// <summary>
/// Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張
/// </summary>
public class CaptureScreenshotFromEditor : Editor
{
    /// <summary>
    /// キャプチャを撮る
    /// </summary>
    /// <remarks>
    /// Edit > CaptureScreenshot に追加。
    /// HotKeyは Ctrl + Shift + F12。
    /// </remarks>
    [MenuItem("Edit/CaptureScreenshot #%F12")]
    private static void CaptureScreenshot()
    {
        var fileName = System.DateTime.Now.ToString("スクリーンショット yyyy-MM-dd HH.mm.ss") + ".png";
        Observable.FromCoroutine(() => CaptureCoroutine(fileName)).Subscribe();
    }

    private static IEnumerator CaptureCoroutine(string fileName)
    {
        var texture = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);

        yield return new WaitForEndOfFrame();

        texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        texture.Apply();

        var bytes = texture.EncodeToPNG();
        Destroy(texture);
        System.IO.File.WriteAllBytes(fileName, bytes);

        Debug.Log("ScreenShot: " + fileName);
    }
}
```

## 3. うまく撮れる
Yay!😃

<img width="1024" alt="スクリーンショット 2017-10-30 21.03.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/27863/6ddd278a-38e7-92fd-90ab-a4404b5465f5.png">


# 参考
* [Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張](https://qiita.com/dj_kusuha/items/13a68474edfd78e41b82)
* [ScreenCapture.CaptureScreenshot](https://docs.unity3d.com/ScriptReference/ScreenCapture.CaptureScreenshot.html)
* [Texture2D.ReadPixels](https://docs.unity3d.com/ja/current/ScriptReference/Texture2D.ReadPixels.html)
* [[Unity] 画面をキャプチャーしてPNGファイルへ出力する [Not RenderTexture]](http://kikikiroku.session.jp/unity-capture-display-output-png/)* [Unity + iOSでApplication.CaptureScreenshotを使わずにスクリーンキャプチャーをカメラロールに保存する](http://marunouchi-tech.i-studio.co.jp/2155/)
* [ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.【Unity】【トラブルシューティング】](http://kan-kikuchi.hatenablog.com/entry/WaitForEndOfFrame)
* [【Unity】エディタ拡張でUniRxを用いてコルーチンを実行する](http://tm8r.hateblo.jp/entry/2016/04/25/215345)


# 作ったアプリ
今流行りの仮想通貨（ビットコイン・アルトコイン・トークン）の価格を一覧表示するアプリです。
国内外15以上の取引所・25以上の通貨に対応してるすごいやつです。是非ダウンロードしてみてください！

<b>Cryptopippi</b>

* Android：[https://play.google.com/store/apps/details?id=com.jagapippi.cryptopippi&hl=ja](http://goo.gl/cGsohD)
* iOS：[https://itunes.apple.com/jp/app/cryptopippi/id1301946758?mt=8](https://goo.gl/kEPHae)

![screenshot1.png](https://qiita-image-store.s3.amazonaws.com/0/27863/4506133b-8ac4-3d4a-6ee3-5d83b5b525f6.png) ![screenshot2.png](https://qiita-image-store.s3.amazonaws.com/0/27863/afccd693-d62c-8555-6469-b6173ce7a2fd.png) ![screenshot3.png](https://qiita-image-store.s3.amazonaws.com/0/27863/3c06d0ea-2f45-7571-9c14-c2428efa546b.png) ![screenshot4.png](https://qiita-image-store.s3.amazonaws.com/0/27863/4d923ee4-45f8-067c-cde8-cb066dde3de8.png) ![screenshot5.png](https://qiita-image-store.s3.amazonaws.com/0/27863/f31dcca3-4a8f-319c-a77b-3b7fb99c160d.png)