ロバメモ - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

Gameウィンドウのスクリーンショットを撮りたい

やりたいこと

OSのスクリーンショット機能で撮影していたけど、切り取りしてリサイズしてが面倒。
Gameウィンドウをそのままの解像度で撮影できないものかと検索してみたところ、出来たのでその方法をメモ。

f:id:nico-taniku:20181016073404p:plain

スクリプトを作成

Editorフォルダの中に作成する。
f:id:nico-taniku:20181015104521p:plain

コード

using System;
using UnityEngine;
using UnityEditor;

public class GameWindowScreenShot : Editor
{
    static string path = "./Assets/ScreenShot/";

    //command + shift + s
    [MenuItem("ScreenShot/Save %#s")]
    static void ScreenShot()
    {
        var filePath = path + "SS" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
        Debug.Log("ScreenShot : " + filePath);
        ScreenCapture.CaptureScreenshot(filePath);

    }

}

画像の保管場所

以下のコードの箇所で設定できる。
この場合は、アセットにScreenShotフォルダーを作成して、それを保管場所に設定してある。

 static string path = "./Assets/ScreenShot/";

画像の名前

SSの後に撮影年月日時刻が秒単位まで入る。 該当コードは以下。

var filePath = path + "SS" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";

スクリーンショットの撮り方

メニューバーに、ScreenShotの項目が増えてるので、そこのSaveを実行すると撮れる。
ショートカットキーは、Cmd(winならctrl) + Shift + S
f:id:nico-taniku:20181015105027p:plain

Refleshをすると、アセットに作成したpngが表示される。

ショートカットキーを変更したい

設定箇所は、以下の部分の %#s のところで設定
既存のショートカットキーと被らないように注意。

[MenuItem("ScreenShot/Save %#s")]

% = Cmd(ctrl)
# = Shift
s = Sキー

参考:UnityEditor.MenuItem - Unity スクリプトリファレンス

解像度の設定

Gameウィンドウで設定した解像度でpng画像が作られる。
f:id:nico-taniku:20181016072705p:plain:w400
f:id:nico-taniku:20181016072752p:plain:w400

使用したメソッド

キャプチャーするメソッド
ScreenCapture-CaptureScreenshot - Unity スクリプトリファレンス

日付を取得するメソッド
日付や時刻を文字列に変換するには?:.NET TIPS - @IT

参考にしたサイト様

Unityで開発中画面のスクリーンショットを撮る | Unity | DoRuby

以上。