【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でスクリーンショットを保存する方法を紹介しました。
関連ページ
こちらのページも合わせてご覧下さい