【Unity】ゲーム画面のスクリーンショットを保存する

【Unity】ゲーム画面のスクリーンショットを保存する Unity
記事内に広告が含まれています。
スポンサーリンク

記事作成時の動作環境

  • Unity 2022.3.4f1

実装例

クリックでスクリーンショットを保存するボタンを用意しました。

以下はボタンにアタッチするサンプルスクリプトです。

スクリーンショットの保存には「ScreenCapture.CaptureScreenshot」メソッドを使用します。

using UnityEngine;

public class ScreenShot : MonoBehaviour
{
    public void CameraButton()
    {
        ScreenCapture.CaptureScreenshot("test.png");
    }
}

ScreenCapture.CaptureScreenshotの引数にファイル名のみを指定した場合、プロジェクトフォルダ直下(Assetsフォルダがある場所)に保存されています。

画像ファイルを開いてみると、ゲームの画面がそのままスクリーンショットとして保存されていることが分かります。

同じ名前のスクリーンショットが既に存在している場合は上書き保存されます。

古いスクリーンショットを残しておきたい場合、連番を振るなどの対策が必要です。

保存先・ファイル名について

先述のサンプルスクリプトではファイル名のみ指定しましたが、パスを指定することも可能です。

指定したパスが存在しない場合はエラーになります。

ScreenCapture.CaptureScreenshot("Assets/test/test.png");

Unityはプラットフォームによって保存先が変わったりするので、「Application.persistentDataPath」を使用して決まった場所に保存するのが良さそうです。

また、ファイル名は必ず拡張子まで含めるようにしてください。

拡張子が無い場合、以下の画像のようなファイルが生成されます。

その他の引数について

ScreenCapture.CaptureScreenshotではファイル名の他に、以下の2つを設定することが出来ます。

  • 解像度(superSize)
  • ステレオキャプチャモード(StereCaptureMode)

解像度(superSize)

解像度はint型で指定します。

ScreenCapture.CaptureScreenshot("test.png", 2);

例えば解像度に「2」を指定すると、通常のサイズ(解像度の指定なし)の2倍になります。

ステレオキャプチャモード(StereCaptureMode)

ステレオキャプチャモードはStereoScreenCaptureModeの列挙型で指定します。

ScreenCapture.CaptureScreenshot("test.png", ScreenCapture.StereoScreenCaptureMode.LeftEye);

「LeftEye」「RightEye」「BothEyes」の3種類あり、全て試してみましたが違いが分かりませんでした。

おそらくXR(VR、ARなど)で使用するものだと思います。

さいごに

「ScreenCapture.CaptureScreenshot」はスクリーンショットを保存する時以外でも活躍する場面があります。

例えば、SNSシェア機能で添付する画像を作成するために使ったりします。

また、スクリーンショットの保存には時間がかかる可能性もあるので、コルーチンなどを使って実装するのがいいかもしれません。

参考サイト

コメント

タイトルとURLをコピーしました