(更新履歴)2024/12/24 画像の表示を修正
実装例
クリックでスクリーンショットを保存するボタンを用意しました。
以下はボタンにアタッチするサンプルスクリプトです。
スクリーンショットの保存には「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シェア機能で添付する画像を作成するために使ったりします。
また、スクリーンショットの保存には時間がかかる可能性もあるので、コルーチンなどを使って実装するのがいいかもしれません。
コメント