トップ > 【Unity】ゲームビューのスクリーンショットを撮る方法を紹介します!
更新日 2024/2/26

【Unity】ゲームビューのスクリーンショットを撮る方法を紹介します!

Unityのゲームビューのスクリーンショット画像を撮る方法を紹介します。

screenshot thumbnail

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フォーマットが必要だそうなので今回は諦めましょう。

Texture2D::EncodeToEXR needs an uncompressed HDR texture format.

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エディターのメニューからスクリーンキャプチャーを保存できるようにしましょう。

ScreenCapture_Menu

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.cs

Unityエディターはスクリプトで簡単にメニューを追加できますよ。

まとめ

今回の記事のまとめだよ!

1.PNGで保存するならScreenCapture.CaptureScreenshotが便利!
2.PNG以外の形式を使いたいならScreenCapture.CaptureScreenshotAsTexture!

スクリーンショットを簡単に保存できるようになったね!

Unityでスクリーンショットを保存する方法を紹介しました。

関連ページ

こちらのページも合わせてご覧下さい

resource
【Unity】スクリプトからテクスチャーなどのリソースを読み込む様々な方法を紹介します!2024/2/9
event_init
【Unity】MonoBehaviourの初期化イベントについて考察します!2024/2/12
singleton
【Unity】シングルトンパターンを実装する方法を紹介します!2024/3/1
resident_object
【Unity】ゲームオブジェクトを常駐化させるための方法を紹介します!2024/3/1
json
【Unity】UnityでJSONを扱う方法を紹介します!配列のシリアライズ対応方法やディープコピーのテクニックなども紹介しますよ!2024/3/28

Copyright ©2022 - 2024 うにぉらぼ