スクリーンショットを撮影して保存する方法です。
画像のように透過画像にも対応しています。(白黒の四角背景が透過部分です)

描画完了後に呼び出す必要があり、コルーチンを使用しています。
void Update() { // クリックしたらスクリーンショット撮影 if (Input.GetMouseButtonDown(0)) { StartCoroutine("ScreenShot"); } } /// <summary> /// スクリーンショット /// </summary> /// <returns></returns> IEnumerator ScreenShot() { yield return new WaitForEndOfFrame(); // 画像生成 Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false); tex.alphaIsTransparency = true; tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0); tex.Apply(); // byteデータに変換 byte[] bytes = tex.EncodeToPNG(); // 破棄 DestroyImmediate(tex); // 日付をファイル名にする DateTime dt = DateTime.Now; string dateStr = dt.Year + "_" + dt.Month + dt.Day + "_" + dt.Hour + dt.Minute + "_" + dt.Second; // 保存 File.WriteAllBytes(Application.dataPath + "/" + dateStr + ".png", bytes); }
途中で詰まったこと
なぜだか下画像のように白黒っぽくなることがありました。
原因なのですが、結論から言うと
ポストプロセスのFXAA(アンチエイリアシング)にある、
Keep Alphaという項目ににチェックが入っていないことでした・・・。
これに気付かなくてしばらく悩んでいました。
ちなみにTAAやMSAAでは色が変になりませんでした。
ご参考までに。

© Unity Technologies Japan/UCL
コメント