プレイ画面を保存してみる

ayumegu(プログラマー)
よろしくお願いします。

今回はスクリーンショットと画面の一部のスクリーンショットをとってみる。
どちらも以外と簡単で、特にスクリーンショットはメソッド一個で完了です

こんな感じのです

  • 左:プレイ画面
  • 真ん中:フルスクリーンキャプチャを少し小さくして画面に表示したところ
  • 右:画面の一部をキャプチャして画面に表示したところ

スクリーンショットをとってみる

1
Application.CaptureScreenshot("画像名.png");

これだけ。

とったスクリーンショットを表示してみる

参考にさせていただいたソースはこちら

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   // 画像の保存先パス取得
  private string GetScreenShotPath()
  {
      string path = "";
      switch (Application.platform) {
      case RuntimePlatform.IPhonePlayer:
          path = Application.persistentDataPath + "/画像名.png";
          break;
      case RuntimePlatform.Android:
          path = Application.persistentDataPath + "/画像名.png";
          break;
      default:
          path = "画像名.png";
          break;
      }
      return path;
  }

  // とったスクリーンショットを表示するメソッド
  public void ShowCapture()
  {
      byte[] image = File.ReadAllBytes(screenShotPath);
      
      Texture2D tex = new Texture2D(0, 0);
      tex.LoadImage(image);
      
      // NGUI の UITexture に表示
      UITexture target = GameObject.Find("2DTextureObject").GetComponent<UITexture>();
      target.mainTexture = tex;
  }
  

画面の一部を保存する

こちらはさすがに1行とはいかないみたいですがそれでも短くかけました

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   public void ScreenShotClick2()
  {
      StartCoroutine(UploadPNG());
  }

  private IEnumerator UploadPNG() {
      // スクリーン上のレンダリングが完了するまで待つ。
      yield return new WaitForEndOfFrame();
      // 保存画像サイズ
      int width = 120;      
      int height = 120;
      Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
      tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
      tex.Apply();

      byte [] pngData = tex.EncodeToPNG();
      screenShotPath = GetScreenShotPath();

      File.WriteAllBytes(screenShotPath, pngData);    }

とった画像をフレームなんかと合成させたりすればいろいろな演出に使えそうですね〜。
キャプチャするときにUI周りを非表示にしたりすれば、懐かしのポケモンスナップみたいなゲームも作れそうですね。
はい、今回はこの辺で。