2018/08/23追記
気づいたら Application.ScreenShot
が使えなくなっていたので ScreenCapture.ScreenShot
に変更しました。 Unity 2018.2.5f1 で動作確認。
困っている方 がいらしたのに気づかず申し訳ない。。
Unityで開発していると、Gameビューの画面をそのままスクショして共有したい時があるんですが、標準でその機能が無かったりするのでEditor拡張で書いてみました。
(GitHub Gistにスクリプトファイルがあります → https://gist.github.com/dj-kusuha/a24e17a2d13e37e71214 )
using UnityEditor;
using UnityEngine;
namespace djkusuha.Utility
{
/// <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("yyyyMMdd-HHmmss") + ".png";
// キャプチャを撮る
#if UNITY_2017_1_OR_NEWER
ScreenCapture.CaptureScreenshot(filename); // ← GameViewにフォーカスがない場合、この時点では撮られない
#else
Application.CaptureScreenshot(filename); // ← GameViewにフォーカスがない場合、この時点では撮られない
#endif
// GameViewを取得してくる
var assembly = typeof(EditorWindow).Assembly;
var type = assembly.GetType("UnityEditor.GameView");
var gameview = EditorWindow.GetWindow(type);
// GameViewを再描画
gameview.Repaint();
Debug.Log("ScreenShot: " + filename);
}
}
}
なんかあっさり書けたな?
やってることは普段良く使われている(はずの) Application.CaptureScreenshot
が全てですが、それ以降にGameビューを再描画する処理を書いています。
なんでこんなものがあるのかと言いますと、 Application.CaptureScreenshot
を呼んだだけではスクショのファイルが保存されなかったんですが、Gameビューが再描画された時(フォーカス合わせたりとか)に保存されていたので、スクリプトから強制的に再描画させるために追加してあります。
ちなみに MenuItem
に #%F12
と指定することで Ctrl + Shift + F12
で CaptureScreenshot
が呼ばれるようになります。
このあたりは 公式リファレンス をどうぞ。
参考: