Unity×iOS

【Unity】スクリーンショットに自動でウォーターマークを合成する方法|SNS対策にも便利!

ゲーム画面をスクリーンショットで保存・共有できる機能は、プレイヤーの体験やSNS拡散にもつながる重要な仕組みです。
しかし、画像だけがそのまま保存・拡散されると、「どのゲームか分からない」「ブランドが伝わらない」ことも…。
そこで活躍するのが ウォーターマーク(透かしロゴ) の自動合成!
この記事では、Unityでスクリーンショットに自動的にロゴ画像を合成して保存する方法を、コピペOKのスクリプト付きで解説します!

この記事で分かること

  • スクリーンショット画像にロゴを合成する処理の流れ
  • Unity標準APIだけで完結できる方法(ネイティブ不要)
  • 【コピペOK】スクショ取得+ウォーターマーク合成スクリプト
  • 合成済み画像を保存 or SNS共有する拡張例

スクリーンショット+ウォーターマーク合成の流れ

  1. Unityで ScreenCapture.CaptureScreenshotAsTexture() を使って画面を取得
  2. Texture2D型のロゴ画像を読み込み
  3. 合成して1枚の画像にまとめる
  4. PNG形式で保存する

【コピペOK】ウォーターマーク合成スクリプト

using UnityEngine;
using System.IO;

public class ScreenshotWithWatermark : MonoBehaviour
{
    public Texture2D watermark; // 合成するロゴ画像(透明PNG推奨)
    public Vector2 offset = new Vector2(30, 30); // 右下からの余白

    public void CaptureAndSave()
    {
        StartCoroutine(CaptureRoutine());
    }

    private IEnumerator CaptureRoutine()
    {
        yield return new WaitForEndOfFrame();

        Texture2D screenTex = ScreenCapture.CaptureScreenshotAsTexture();
        Texture2D finalTex = new Texture2D(screenTex.width, screenTex.height, TextureFormat.RGBA32, false);

        // 背景にスクリーンショットをコピー
        finalTex.SetPixels(screenTex.GetPixels());

        // ロゴサイズ調整(解像度対応)
        int logoWidth = watermark.width;
        int logoHeight = watermark.height;

        // 右下にロゴを合成
        int xStart = screenTex.width - logoWidth - (int)offset.x;
        int yStart = offset.y;

        Color[] logoPixels = watermark.GetPixels();

        for (int y = 0; y < logoHeight; y++)
        {
            for (int x = 0; x < logoWidth; x++)
            {
                Color logoPixel = logoPixels[x + y * logoWidth];
                Color bgPixel = finalTex.GetPixel(x + xStart, y + yStart);
                finalTex.SetPixel(x + xStart, y + yStart, Color.Lerp(bgPixel, logoPixel, logoPixel.a));
            }
        }

        finalTex.Apply();

        // PNG保存
        byte[] bytes = finalTex.EncodeToPNG();
        string path = Path.Combine(Application.persistentDataPath, "screenshot_with_logo.png");
        File.WriteAllBytes(path, bytes);

        Debug.Log($"保存成功: {path}");

        Destroy(screenTex);
        Destroy(finalTex);
    }
}

実装ポイント

  • ロゴ画像は透明PNG推奨(アルファ付きで合成が自然)
  • サイズは小さめ(横幅の10〜20%)に調整するとバランス良好
  • Application.persistentDataPath で保存すればiOS/Android両対応

活用アイデア

  • ゲームロゴ+ハッシュタグを画像に合成してSNS拡散力UP
  • ユーザー名やスコア情報も一緒に画像に焼き込むことで不正対策に
  • 公式イベント用のシーズンロゴ・コラボロゴを一時的に合成して展開可能

注意点・補足

  • SNSにアップロードするには別途共有機能(Native Share等)の実装が必要
  • 保存した画像のパスをプレイヤーに知らせるUI設計も重要
  • AndroidではStorageアクセス許可が必要なケースあり

まとめ

項目内容
Unity標準機能でウォーターマーク合成は可能
Texture2Dを合成→PNG保存で完結
透過PNG+右下配置が最も実用的
ブランド認知・SNS拡散・保護対策に活用できる

Unityで作ったゲームやアプリの魅力を、スクリーンショット+ロゴ入り画像でさらに広めていきましょう!