【Unity】ゲーム画面のスクリーンショットを撮影し、UIとして使用する

シェアする

ノベルゲームのセーブ画面のUIなど、ゲームの画面を画像素材として使用したい時があります。

Unityのゲーム中にスクリーンショットを作成し、必要であればファイルに出力をし、
ゲームオブジェクトとして使用する例をご紹介します。

スポンサーリンク

作業環境

  • MacBook Air
  • macOS Sierra 10.12.6
  • Unity 5.5.4p5

スクリーンショットの撮影

今回のサンプルではボタンを2つ用意し、
それぞれ撮影ボタンと表示ボタンとして使用します。

新しくスクリプトを作成し、コードは以下のようにします。

スクリプトの作成を終えたら、空のゲームオブジェクトを作成し、
先ほどのスクリプトをアタッチします。

撮影用ボタンを作成します。
UI>Buttonからボタンを作成し、OnClick()
先ほどのスクリプトのClickShootButton()を設定します。

撮影用ボタンを押すことでスクリーンショットが撮影され、スクリプト内の「screenShotPath」変数を使って指定されているパスにファイルが保存されます。

スクリーンショットの表示

保存されたスクリーンショットを表示する場合は、もう1つUIを用意します。
RawImageを作成し、撮影時に生成した「Texture2D」を貼り付けます。

UI>RawImageから「RawImage」を作成し、さらに「RawImage」に
Add Component」ボタンから「Button」コンポーネントを追加します。
RawImageを適当な位置に配置し、Scaleを見やすい大きさに調節しておきます。
RawImageに追加したButtonコンポーネントのOnClick()には、
先ほどのスクリプトのShowSSImageを設定しておきます。

先ほど作成した撮影用ボタンを押した後に、RawImageオブジェクトをクリックする事で、
撮影したスクリーンショットを表示することができます。

今回のサンプルでは直前に撮ったスクリーンショットしか表示できませんが、
撮影した画像へのパスを記憶しておけば、いつでも任意の画像を呼び出すことができます。

スクリプト解説

撮影部分の処理はコルーチンのCreateScreenShot()で行なっています。
カメラに描画されている内容をスクリーンショットとして使うので、
そのフレームの描画を待つためにコルーチンを使ってフレームの最後まで待っています。
カメラの描画内容から「Texture2D」を作成し、
バイト配列に変換したあとpngファイルに書き出します。
最後に、次に撮影する時に以前の画像が残らないように
targetTextureに登録していた内容を削除しておきます。

サンプルプロジェクト

今回のサンプルプロジェクトはこちらです。

Contribute to ChatLune/UnityScreenShot development by creating an account on GitHub.

スクリーンショットの保存先は、プロジェクトフォルダ直下になっています。
また、撮影の際に画面に変化が出るように、回転するCubeをばら撒くようにしています。

入社二年目のエンジニアです。
Unity C# Java Android CakePHP などを勉強中です。

スポンサーリンク

シェアする

フォローする