【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 UnityScreenShot development by creating an account on GitHub.

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

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

スポンサーリンク

シェアする

フォローする