通常、ゲームのフレームが終了するのを待つことが望ましいです(すべてのグラフィックが描画されるのを待ってからスクリーンショットを撮るためです)。
次のようにコルーチン関数を作成し、フレームの終了を待つようにできます:
IEnumerator TakeScreenShot()
{
yield return new WaitForEndOfFrame();
ScreenCapture.CaptureScreenshot(fileName);
}
その後、次のように関数を呼び出すことができます:
StartCoroutine(TakeScreenShot());
ただし、Unity CaptureScreenshot
関数には多くの問題があることがあります...
したがって、別の代替手段として以下を試すこともできます:
IEnumerator TakeScreenShot()
{
yield return new WaitForEndOfFrame();
// 画像をスクリーンから読み取って設定します。
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();
// 画像を '.PNG' に変換します。
byte[] imageBytes = screenImage.EncodeToPNG();
// 変換された画像をファイルに保存します!
System.IO.File.WriteAllBytes(fileName, imageBytes);
}
これが役立つことを願っています!
PS. 私は日本語があまり得意ではないので、この投稿はDeepLとChatGPTで部分的に翻訳されました ww