Unity : C# : ボタンクリック時処理の中に組み込まれるコルーチンの書き方
Q&A
Closed
解決したいこと
Unityで、UIのボタンを押すと画面キャプチャを保存するアプリケーションを作ろうとしています。
画面キャプチャを保存する前に、ボタンなどのUIを画面から消す必要があります。
PCではUIのGameObjectをSetActive(false)した後にScreenCapture.CaptureScreenshot(fileName);
すればUIが映り込まないスクショを保存することができていますが、iOSでカメラロールに保存したく
下記の「NativeGallery」というUnityPackageを導入しました。
するとカメラロールに保存された画像にボタンなどのUIが映り込んだままになってしまいました。
まとめると
1.UIのボタンを押したことをトリガーにして
2.UIのボタンを画面から消す描画処理の終了を待ってから
3.NativeGalleryによるキャプチャ→カメラロールへの保存処理を実施する
ことを行いたく、おそらく「コルーチン」という仕組みを使うものと思います。
発生している問題・エラー
UIのボタンに紐つけたコルーチンを作りたいのですが、いくつかあるコルーチンの解説記事にある例示はコルーチンの呼出し(StartCoroutine)をStart()メソッドで行なうものばかりで、そのまま適用するとアプリ実行時に最初に呼び出されてしまい、結果としてアプリ実行最初にUIが表示上画面から全て消えてしまう上に保存したくもない画像がカメラロールに保存されてしまうことになってしまいました。悩んでいます。
該当するソースコード
C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OnClickCaptureScript : MonoBehaviour
{
public void Start()
{
StartCoroutine(OnClickCapture());
}
public IEnumerator OnClickCapture()
{
string date = System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
GameObject[] hideObjects = GameObject.FindGameObjectsWithTag("UI_01");
foreach (GameObject ui in hideObjects) { ui.SetActive(false); }
yield return new WaitForEndOfFrame();
string fileName = date + ".png";
var w = Screen.width; var h = Screen.height;
var ss = new Texture2D(w, h, TextureFormat.RGB24, false);
ss.ReadPixels(new Rect(0, 0, w, h), 0, 0);
ss.Apply();
NativeGallery.SaveImageToGallery(ss, "GalleryTest", fileName);
}
}
StartCoroutineをStartメソッドに記述しないコルーチンの書き方を教えてください。
自分で試したこと
OnClickCapture()をボタンにアタッチしたいのですができず、Start()をアタッチしています。