【Unity】スクリーンショットを実装するのに「Capture and Save」というアセットが便利だった

投稿日:2017年12月3日 更新日:

Unityでスクリーンショットを撮影する方法を調べていて見つけたアセット「Capture and Save (Pro)」がとても便利でした。簡単にスクリーンショットを撮影できる上に、ファイル名も自動で割り振った上でファイルを保存してくれます。また、アルバムやギャラリーへの登録もやってくれるので便利です。

以下、Capture and Saveの使い方をメモしておきます。

Capture and Save (Pro)の使い方

Capture and Saveをプロジェクトにインポートしたら、Capture and Saveのプレハブ「CaptureAndSave > Prefab > CaptureAndSave」をヒエラルキーの直下にドラッグアンドドロップします。

capture and save

これだけで、スクリーンショットを撮影する準備は完了です。早速、Capture And Saveで画像を撮影してみましょう。

まずは全体像から。こんな感じのコードを書いてあげます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraButton : MonoBehaviour {

	CaptureAndSave snapShot;

	void Start() {
		snapShot = GameObject.FindObjectOfType();
	}

	public void OnClick() {
		//スクリーンショットを撮影する
		snapShot.CaptureAndSaveToAlbum (ImageType.PNG);
}

CaptureAndSave snapShot」としてCaptureAndSaveのインスタンスを保持します。インスタンスは「GameObject.FindObjectOfType();」で取得できます。このインスタンスを使って、スクリーンショットを撮影します。

スクリーンショットの撮影自体は、「snapShot.CaptureAndSaveToAlbum (ImageType.PNG);」を呼んであげるだけです。これだけで、プレフィックス+現在時刻.pngみたいな感じのファイル名でスクリーンショットを保存してくれます。

Androidでスクリーンショットを撮影する

これだけでスクリーンショットを撮影してくれるはずなんですが、Androidでは画像が保存されなくて困りました。解決方法としては、AndroidManifestをイジって適切にパーミッションを付与する、ということになります。

UnityのデフォルトではAndroidManifestをイジれないので、以下の方法でイジれるようにします。

  • ビルドしたら作られるTemp/StagingArea/以下にAndroidManifest.xmlがある
  • それをAssets/Plugins/Android/にコピー(ビルドが通ります)

出典:UnityでAndroidManifestを追加したい時の入手先 - Qiita

AndroidManifestでパーミッションを適切に付与すれば、Androidでは画像が保存できるようになるはずです。AndroidManifestの編集方針については、あまり良くないなーと思いながら編集していたので公開しませんが、各自適当に編集してみてください。

まとめ

「Capture and Save」というUnityのアセットを使って、スクリーンショットを保存する方法をまとめました。面倒な実装を省略できるので、コードを綺麗に保てていい感じです。もし機会があれば使ってみてください!

茨城県つくば市在住のAndroidアプリエンジニアです。

-Unity

Copyright© Androidアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.