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

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

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

こんな感じのです

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

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

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

これだけ。

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

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

// 画像の保存先パス取得
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行とはいかないみたいですがそれでも短くかけました

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周りを非表示にしたりすれば、懐かしのポケモンスナップみたいなゲームも作れそうですね。
はい、今回はこの辺で。