【Unity】Recorderパッケージを使用してスクリーンショットを撮り、特定の色を透過にしてPNGファイルを作成する

キャプチャー後、画像を加工するために手順を踏む必要があります。

手順

  1. Unity Recorderをインストール
  2. スクリーンショットを撮るスクリプトを作成
  3. 特定の色を透過にしてPNGファイルを保存するスクリプトを作成

以下に、それぞれの手順を説明し、必要なコードを提供します。

1. Unity Recorderのインストール

  1. Unityエディターのメニューから Window -> Package Manager を開きます。
  2. Package Managerで Unity Recorder を検索してインストールします。

2. スクリーンショットを撮るスクリプトの作成

スクリーンショットを撮るための簡単なスクリプトを作成します。このスクリプトは、Camera コンポーネントから画像をキャプチャして、Texture2Dとして保存します。

using UnityEngine;

public class ScreenshotTaker : MonoBehaviour
{
    public Camera cameraToCapture;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            TakeScreenshot();
        }
    }

    void TakeScreenshot()
    {
        RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
        cameraToCapture.targetTexture = rt;
        Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        cameraToCapture.Render();
        RenderTexture.active = rt;
        screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        screenShot.Apply();
        cameraToCapture.targetTexture = null;
        RenderTexture.active = null;
        Destroy(rt);

        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/../Screenshot.png";
        System.IO.File.WriteAllBytes(filename, bytes);
        Debug.Log($"Screenshot saved to {filename}");
    }
}

3. 特定の色を透過にしてPNGファイルを保存するスクリプト

次に、特定の色を透過にしてPNGファイルとして保存するためのコードを追加します。以下のスクリプトは、上記のスクリーンショットを撮る部分に続けて特定の色を透明に変換します。

using UnityEngine;

public class TransparentScreenshotTaker : MonoBehaviour
{
    public Camera cameraToCapture;
    public Color colorToMakeTransparent = Color.white; // 透過にする色を設定

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            TakeScreenshot();
        }
    }

    void TakeScreenshot()
    {
        RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
        cameraToCapture.targetTexture = rt;
        Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false);
        cameraToCapture.Render();
        RenderTexture.active = rt;
        screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        screenShot.Apply();
        cameraToCapture.targetTexture = null;
        RenderTexture.active = null;
        Destroy(rt);

        // 特定の色を透明に変換
        Color[] pixels = screenShot.GetPixels();
        for (int i = 0; i < pixels.Length; i++)
        {
            if (pixels[i] == colorToMakeTransparent)
            {
                pixels[i] = new Color(0, 0, 0, 0);
            }
        }
        screenShot.SetPixels(pixels);
        screenShot.Apply();

        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/../TransparentScreenshot.png";
        System.IO.File.WriteAllBytes(filename, bytes);
        Debug.Log($"Transparent screenshot saved to {filename}");
    }
}

このスクリプトを使用するために、特定の色を colorToMakeTransparent で設定してください。また、Camera コンポーネントを cameraToCapture にアタッチすることを忘れないでください。

使用方法

  1. Unityエディターで新しいスクリプトを作成し、上記のコードをコピーして貼り付けます。
  2. スクリプトを適当なGameObjectにアタッチします(例:カメラオブジェクト)。
  3. UnityエディターのPlayモードで P キーを押してスクリーンショットを撮ります。

これで、指定した色が透過されたPNGファイルがプロジェクトディレクトリに保存されます。

ファイル名はTransparentScreenshot.pngになります

Unity

Posted by hidepon