↓
unity ではキャラだけで背景をヌキにしたスクリーンショットを簡単に撮る事ができます。
(unity2020 以降と書きましたが、多分それ以前でも動作すると思います)
やり方
Camera は Skybox ではなく SolidColor にして、Background のα値を 0 にします。
次に、以下のコードを適当な GameObject に貼り付けてください。
using System; using System.Collections; using System.IO; using UnityEngine; public class AlphaScreenShot : MonoBehaviour { const string SCREENSHOT_DIRECTORY = "Assets/ScreenShots/"; void Start() { if (Directory.Exists(SCREENSHOT_DIRECTORY) == false) { Directory.CreateDirectory(SCREENSHOT_DIRECTORY); } StartCoroutine(loop()); } IEnumerator loop() { while (true) { if (Input.anyKeyDown == false) { yield return null; continue; } // これがないと failed to generate texture エラー yield return new WaitForEndOfFrame(); var filename = $"{DateTime.Now.ToString().Replace('/', '-').Replace(':', '-')}.png"; var filepath = Path.Combine(SCREENSHOT_DIRECTORY, filename); var texAlpha = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false); texAlpha.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); texAlpha.Apply(); // Encode texture into PNG var bytes = texAlpha.EncodeToPNG(); File.WriteAllBytes(filepath, bytes); Destroy(texAlpha); } } }
他の記事で OnPostRender が必要というものも見受けられますが、WaitForEndOfFrame() でも同じタイミングを捕らえるので、Camera オブジェクトである必要はありません。
Game ウィンドウ内で何かキーを押す度に現在のスクリーンを Assets/ScreenShots/ に保存します。
なお、背景ありでよければコード1行だけでOKです。
ScreenCapture.CaptureScreenshot(filepath);