
↓

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);



