プレイ画面を保存してみる
今回はスクリーンショットと画面の一部のスクリーンショットをとってみる。
どちらも以外と簡単で、特にスクリーンショットはメソッド一個で完了です
こんな感じのです
- 左:プレイ画面
- 真ん中:フルスクリーンキャプチャを少し小さくして画面に表示したところ
- 右:画面の一部をキャプチャして画面に表示したところ
##スクリーンショットをとってみる
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周りを非表示にしたりすれば、懐かしのポケモンスナップみたいなゲームも作れそうですね。
はい、今回はこの辺で。