【Unity】ゲームビューのスクリーンショットを撮る方法を紹介します!
Unityのゲームビューのスクリーンショット画像を撮る方法を紹介します。
Unityでスクリーンショットはどうやって撮るんだろ?
初めての方にも分かりやすく簡単に解説しますね。
ScreenCaptureのCaptureScreenshotを利用する
ScreenCapture.CaptureScreenshot関数を利用するとスクリーン画像がPNG形式で保存できます。保存先はプロジェクトルートディレクトリです。
ScreenCapture.CaptureScreenshot("test.png");
		シンプルでとても簡単だね!
手っ取り早くスクリーン画像を保存したいならコレを使いましょう!
ScreenCaptureのCaptureScreenshotAsTextureを利用する
ScreenCapture.CaptureScreenshotAsTexture関数でスクリーンキャプチャーされたテクスチャ(Texture2D)が取得できます。Texture2Dには各画像フォーマットでエンコードする関数が用意されています。
| 1. EncodeToEXR | 
| 2. EncodeToJPG | 
| 3. EncodeToPNG | 
| 4. EncodeToTGA | 
EXRにエンコードするには非圧縮のHDRフォーマットが必要だそうなので今回は諦めましょう。
JPGフォーマットでエンコードしたバイト配列をファイルに保存するサンプルコードです。ScreenCapture.CaptureScreenshotAsTextureはランタイム時(Unity実行中)にしか使えない点に注意です。
Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture();
byte[] bytes = texture.EncodeToJPG();
File.WriteAllBytes("test.jpg", bytes);
		フォーマット済みのバイト配列を保存するだけだからコレも簡単だね!
PNG以外のフォーマットで保存したい場合はこちらを使いましょう!
スクリーンショットクラスを作成してみる
JPG,PNG,TGAに対応した簡単なスクリーンショットクラスを作ってみます。拡張子付きのパスを引数に取り、フォルダが存在しない場合は自動作成します。使い方は以下のような感じです。
Screenshot.Capture("screenshot/test.png");
		PNGはいつでも使えますが、JPGとTGAはランタイム時にしか使えないので注意して下さい。
using System.IO;
using UnityEngine;
public class Screenshot
{
    public static void Capture(string path)
    {
        string directory = Path.GetDirectoryName(path);
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
        string extension = Path.GetExtension(path).ToLower();
        switch (extension)
        {
            case ".jpg":
            case ".jpeg":
                File.WriteAllBytes(path, ScreenCapture.CaptureScreenshotAsTexture().EncodeToJPG());
                break;
            case ".png":
                ScreenCapture.CaptureScreenshot(path);
                break;
            case ".tga":
                File.WriteAllBytes(path, ScreenCapture.CaptureScreenshotAsTexture().EncodeToTGA());
                break;
        }
    }
}
		ソースコードはGitHubにアップしてありますのでご利用下さい。
code-examples/unity/Screenshot.csフォルダーがない場合は自動的に作ってくれるのは嬉しいね!
PNG,JPG,TGAに対応したスクリーンショットクラスの紹介でした。
Unityエディターのメニューからスクリーンキャプチャーできるようにする
Unityエディターのメニューからスクリーンキャプチャーを保存できるようにしましょう。
		Unityエディターのメニューからスクリーンショットを撮れるようになると便利だね!
以下のソースコードをEditorフォルダ以下に配置して下さい。
using UnityEditor;
public class ScreenshotMenu
{
    [MenuItem("Screenshot/PNGで保存")]
    public static void ScreenshotAsPNG()
    {
        Screenshot.Capture("Screenshot/test.png");
    }
}
		ソースコードはGitHubにアップしてありますのでご利用下さい。
code-examples/unity/Editor/ScreenshotMenu.csUnityエディターはスクリプトで簡単にメニューを追加できますよ。
まとめ
今回の記事のまとめだよ!
| 1.PNGで保存するならScreenCapture.CaptureScreenshotが便利! 2.PNG以外の形式を使いたいならScreenCapture.CaptureScreenshotAsTexture!  | ||
スクリーンショットを簡単に保存できるようになったね!
Unityでスクリーンショットを保存する方法を紹介しました。
関連ページ
こちらのページも合わせてご覧下さい