はじめに
Unityで作ったアプリをiTunes Connect(iTC)にアップロード、「さぁ審査提出だ!」と思ったら、iPad用のスクショを撮ってなかった。そもそもiPadなんて持ってないしシミュレータ用にビルドしてスクショを撮るのはめんどくさいコンパイルに時間的なコストがかかるうえに貧弱なマシンだとシミュレータもまともに動かない。ムダなこと💩のごとし。
既存のやり方コピペでいけるっしょ→いけない
すでに有用なエディタ拡張があることを教えてもらいTry。
Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張
https://qiita.com/dj_kusuha/items/13a68474edfd78e41b82
- 写ってる画面がなぜか小さい
- タブとかウィンドウ全部入りになってる
どうやらScreenCapture.CaptureScreenshot
(そもそもApplication.CaptureScreenshotは使えなくなった)の仕様が変わったらしい。マジ卍。
Texture2D.ReadPixels
でできた
ScreenCapture.CaptureScreenshot
を使わずに、カメラに写ってるものをテクスチャ化するRenderTexture
を内部的に使うらしいTexture2D.ReadPixels
で書き換えたらうまくいった。
撮り方
1. Gameウィンドウで解像度を指定する
2. エディタ拡張を書いてスクショを撮る
以下のスクリプトをEditor
以下に入れてCtrl + Shift + F12
で呼び出すorメニューから実行する。
エディタ拡張でコルーチンを使うために UniRx を使っているので入れてください。
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!😃
参考
- Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張
- ScreenCapture.CaptureScreenshot
- Texture2D.ReadPixels
- [Unity] 画面をキャプチャーしてPNGファイルへ出力する [Not RenderTexture]* Unity + iOSでApplication.CaptureScreenshotを使わずにスクリーンキャプチャーをカメラロールに保存する
- ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.【Unity】【トラブルシューティング】
- 【Unity】エディタ拡張でUniRxを用いてコルーチンを実行する
作ったアプリ
今流行りの仮想通貨(ビットコイン・アルトコイン・トークン)の価格を一覧表示するアプリです。
国内外15以上の取引所・25以上の通貨に対応してるすごいやつです。是非ダウンロードしてみてください!
Cryptopippi