IEnumerator GetTexture(string uri, Image img, CallBackSprite callBack) { using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(uri)) { www.SetRequestHeader("Access-Control-Allow-Origin", "*"); yield return(www.SendWebRequest()); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Texture2D texture = ((DownloadHandlerTexture)www.downloadHandler).texture; img.sprite = callBack(texture); } } }
private IEnumerator captureScreenshotCor( CallBackSprite callback, string fileName, string folderName, bool fileOverWrite) { string folderPath = this.getFolderPath(folderName); #if UNITY_IOS // iOSだとiCloudにバックアップを取りすぎるとリジェクトされる為,バックアップ属性指定フォルダのバックアップ属性を外す. Device.SetNoBackupFlag( folderName ); #endif fileName += PICTURE_EXTENSION; string filePath = folderPath + fileName; yield return new WaitForEndOfFrame(); // 撮影. Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false); tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false); tex.Apply(); // キャプチャ用の情報を作成. string captureID = this.getNowTimeString(); CaptureInfo info = new CaptureInfo(filePath, captureID, tex.EncodeToPNG()); this.captureList.Add(captureID, info); // コールバックでスプライトを先に渡す. Sprite spr = Sprite.Create(tex, new Rect(0, 0, Screen.width, Screen.height), Vector2.zero); callback(spr, filePath); // 別スレッドを作成しそっちで保存. Thread thread = new Thread(new ParameterizedThreadStart(this.saveCaptureImageThd)); thread.Start(captureID); while (!this.captureList[captureID].IsFinished) { yield return new WaitForSeconds(0); } yield return null; }
// スクリーンショットを撮影し,コールバクにSpriteと保存先パスを返す. // 保存先フォルダが存在しなければ新たに作成,フォルダの指定が無ければ[プロダクト名Images]フォルダを作成. // 同名ファイルがある場合に上書きするかも聞く. public void captureScreenshot( MonoBehaviour mono, CallBackSprite callback, string fileName, string folderName = "", bool fileOverWrite = true) { mono.StartCoroutine(captureScreenshotCor(callback, fileName, folderName, fileOverWrite)); }