本日は Unity の小ネタ枠です。
Unityアプリで画面のキャプチャを保存する方法について記事にします。
前回記事
以下の前回記事の続きです。
bluebirdofoz.hatenablog.com
ScreenCapture.CaptureScreenshotAsTexture
ScreenCapture.CaptureScreenshotAsTextureを利用するとTexture2Dとしてスクリーンショットが取得できます。
docs.unity3d.com
サンプルスクリプト
Texture2Dを取得し、Imageコンポーネントに設定したりファイル形式を指定して出力するサンプルスクリプトを作成しました。
・ScreenshotAsTextureTest.cs
using System; using System.IO; using UnityEngine; using UnityEngine.UI; public class ScreenshotAsTextureTest : MonoBehaviour { [SerializeField] private Image applyImage; /// <summary> /// キャプチャの実行関数 /// </summary> public void Capture() { CaptureScreensAsTexturehotByUnityEngine(); } private void CaptureScreensAsTexturehotByUnityEngine() { // スクリーンキャプチャをテクスチャとして取得する Texture2D screenshot = ScreenCapture.CaptureScreenshotAsTexture(); // テクスチャから新しいスプライトを作成して適用する Sprite sprite = Sprite.Create( screenshot, new Rect(0, 0, screenshot.width, screenshot.height), new Vector2(0.5f, 0.5f) ); // 取得したスクリーンショットをUI Imageに適用する applyImage.sprite = sprite; Debug.Log($"スクリーンショットを取得しました。サイズ: {screenshot.width}x{screenshot.height}"); // スクリーンショットをPNGに変換して保存する var date = DateTime.Now.ToString("yyyyMMdd"); string filename = $"screenCapture_{date}.png"; string path = Path.Combine(Application.persistentDataPath, filename); // 透過を除外したい場合はテクスチャの全てのピクセルのアルファ値を255(不透明)に設定する var pixels = screenshot.GetPixels(); for (int i = 0; i < pixels.Length; i++) { pixels[i].a = 1.0f; } screenshot.SetPixels(pixels); screenshot.Apply(); var png = screenshot.EncodeToPNG(); File.WriteAllBytes(path, png); Debug.Log($"ScreenCapture File : {path}"); } }

ボタンを押下してキャプチャを行うと以下のようにImageが反映されます。
