Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
33
Help us understand the problem. What is going on with this article?
@vc_kusuha

Unityエディタ上からGameビューのスクリーンショットを撮るEditor拡張

More than 1 year has passed since last update.

2018/08/23追記

気づいたら Application.ScreenShot が使えなくなっていたので ScreenCapture.ScreenShot に変更しました。 Unity 2018.2.5f1 で動作確認。
困っている方 がいらしたのに気づかず申し訳ない。。


Unityで開発していると、Gameビューの画面をそのままスクショして共有したい時があるんですが、標準でその機能が無かったりするのでEditor拡張で書いてみました。
(GitHub Gistにスクリプトファイルがあります → https://gist.github.com/dj-kusuha/a24e17a2d13e37e71214 )

CaptureScreenshotFromEditor.cs
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 + F12CaptureScreenshot が呼ばれるようになります。
このあたりは 公式リファレンス をどうぞ。


参考:

33
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
virtualcast
VRシステム(バーチャルキャスト)の開発、運営、企画

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
33
Help us understand the problem. What is going on with this article?