スマホアプリにスクリーンショット機能をつけたいと思っているのですができませんでした。
現状、このサイトを参考にさせていただいて、Assetsへの保存に成功しました。
しかし、このサイトをはじめいろんなサイトを参考にiOSに読み込ませるため頑張ってみましたがApplication.persistentDataPathにするとスクリーンショットが撮れなくなってしまいます。
androidについてはまだ手も足も出ていません。
同じプロジェクト上にこのふたつの形式に対応した機能は組み込めるのでしょうか?
とても初心者のためおそらく初歩的なミスと思いますが、どうかお力添えいただけると幸いです。
やりたいこと
・スクリーンショットを撮り、iOSとandroidにてカメラロールに保存されるようにしたい
・その際UIが非表示になるようにしたい
現在のスクリーンショットが撮れるコードはこちらです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System; public class scs : MonoBehaviour { // 非表示にするやつ [SerializeField] private GameObject scsButton; [SerializeField] private GameObject Button; void Start() { // UIの初期設定 scsButton.SetActive(true); Button.SetActive(true); } // スクリーンショットボタンを押す public void OnScreenShot() { StartCoroutine(OperationUI()); } // スクリーンショット処理 IEnumerator OperationUI() { // スクリーンショットを撮る前にUIを全部非表示 scsButton.SetActive(false); Button.SetActive(false); // スクリーンショットを撮る ScreenCapture.CaptureScreenshot(Application.dataPath + "/ScreenShots.PNG", 1); // 待ち時間を入れないとlogPanelが表示されるので一定時間待つ yield return new WaitForSeconds(1.0f); // UIを元に戻す scsButton.SetActive(true); Button.SetActive(true); } }
失敗コードはこちらです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System; using System.Runtime.InteropServices; public class scs : MonoBehaviour { // スクリーンショットボタン [SerializeField] private GameObject scsButton; [SerializeField] private GameObject Button; [DllImport("__Internal")] private static extern void SaveToAlbum(string path); IEnumerator SaveToCameraroll(string path) { // ファイルが生成されるまで待つ while (true) { if (File.Exists(path)) break; yield return null; } SaveToAlbum(path); } void Start() { // UIの初期設定 scsButton.SetActive(true); Button.SetActive(true); #if UNITY_EDITOR #else // スクリーンショットボタンを押す public void OnScreenShot() { StartCoroutine(OperationUI()); } // スクリーンショット処理 IEnumerator OperationUI() { // スクリーンショットを撮る前にUIを全部非表示 scsButton.SetActive(false); Button.SetActive(false); yield return new WaitForSeconds(1.0f); // UIを元に戻す scsButton.SetActive(true); Button.SetActive(true); } string filename = "Screenshot.png"; string path = Application.persistentDataPath + "/" + filename; // 以前のスクリーンショットを削除する File.Delete(path); // スクリーンショットを撮影する ScreenCapture.CaptureScreenshot(filename); // カメラロールに保存する StartCoroutine(SaveToCameraroll(path)); #endif } }
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。