エフアンダーバー

個人開発の記録

Unityのゲーム画面を録画!!

ブログとかに貼る用にゲーム画面をアニメーションGIFやMP4で手軽に保存できるエディタ拡張が欲しかったのでつくってみました。 とはいっても、こちらのFrameCapturerを改造させてもらっただけなのですが。

f:id:fspace:20160905203054g:plain

本家FrameCapturer(GitHub

i-saint.hatenablog.com

使い方

準備

こちらからUnityパッケージをダウンロードして、 メニューの "Assets" > "Import Package" > "Custom Package..." から選択することによりパッケージをインポートします。

それぞれのパッケージについては次の通り。

パッケージ (.unitypackage) 説明
FrameCapturer 本家FrameCapturerに対してバグ修正とリファクタリングを施したパッケージ。ただし、TweetMedia関係は除去。
FrameCapturerExtension 自分のつくったエディタ拡張版FrameCapturerのパッケージ。FrameCapturerパッケージに依存。
FAACSelfBuild MP4で音声を録音する場合に必要なパッケージ
Full 上記の三つすべてが入ったパッケージ

よくわからなければ、Fullを入れておけばとりあえず動きます。

【注意】
これらのパッケージはStreamingAssetsフォルダにアセットを配置します。 StreamingAssetsフォルダのアセットはゲーム内から参照しているかどうかに関わらず、 ビルド後のゲーム本体に組み込まれてしまいます。 エディタ内でのみ録画を行う場合にはゲームのビルド前にStreamingAssets内のアセットを削除してください (MP4で音声を録音することがないのであれば、インポート後すぐに消してしまっても構いません)。

これらは本家FrameCapturerがゲームに組み込まれることを想定して作られているためStreamingAssetsフォルダに含まれていますが、 エディタ拡張としてのみの使用であれば特に別の場所に置いても構わないものです。 現状、場合分けが面倒なのでそのままStreamingAssetsフォルダに置いてありますが、要望があれば変更するかもしれません。

操作方法

メニューの "Window" > "Frame Capturer" から録画用のウィンドウを開きます。

f:id:fspace:20160905203301p:plain

録画方法の指定

ウィンドウ下段最上部の"GIF"ボタン、"MP4"ボタンでどちらの方法で録画するかを指定します。

キャプチャ設定 (GIF・MP4共通)

ウィンドウ下段上部の"Capture Settings"にてキャプチャ対象やキャプチャ方法を設定します。

設定項目 説明
Camera Mode キャプチャ対象のカメラの指定。"Main"でメインカメラ、"Scene"でシーンカメラ、"Custom"で自由にカメラを指定できます。
Resolution Mode 解像度の指定。"Width"および"Height"は指定した幅あるいは高さとアスペクト比から解像度を決定します。"Camera"はカメラのpixelWidthおよびpixelHeightの値を使用します。"Custom"では自由に解像度を指定できます。
Frame Rate Mode フレーム間隔の指定。"Variable"は録画時の現実の時間間隔を使用します。"Constant"は常にフレームレートから算出した固定値を使用します。
Frame Rate フレームレートの指定。一秒間に何枚の画像を録画するか。
Min Update Rate 最小の更新間隔。通常はフレームレートに合わせてUpdateの間隔を調節しますが、あまりに遅いと操作しづらいため、このオプションで最低値を設定できます。

"Frame Rate Mode"は、GIFでは"Constant"を、MP4では"Variable"を通常指定します。

"Frame Rate"は上げると滑らかになる代わりに容量が大きくなり、下げるとぎこちなくなる代わりに容量が小さくなります。 通常は上限30程度で、どうしても素早い動きをきれいに映したい場合に限り60程度まで上げるのがいいと思います。

"Min Update Rate"は常に30で問題ないかと。

f:id:fspace:20160905203300g:plain

GIF設定

GIF選択時にウィンドウ下段下部の"GIF Settings"にてGIFの設定ができます。

設定項目 説明
Number of Colors カラーパレットの色数。1フレームに最大でこの数の色が使えます。
Use Local Palette ローカルパレットを使うかどうか。要するにフレームごとにカラーパレットを用意するかどうか。

"Number of Colors"は2のn乗でない値を指定しても容量は小さくならず、画質だけ落ちるので注意。 GIFの制限上、最大で256色までです。

"Use Local Palette"は設定しないとグローバルパレットと呼ばれるひとつのカラーパレットが全フレームで使われます。 グローバルパレットに含まれる色は最初のフレームのみで決定するため、色の変化が激しいとおかしな色になります。 ローカルパレットを使用しても、容量の増加量は1フレームあたり3n Byte(nは色数)で画素情報に対して相対的に小さい場合が多いので、 基本的にチェックを入れておけばいいと思います (ようはパレットをケチるくらいなら画像を小さくしたほうがお得)。

MP4設定

MP4選択時にウィンドウ下段下部の"MP4 Settings"にてMP4の設定ができます。

設定項目 説明
Capture Video 動画を録画するかどうか。
Bitrate 動画の画質。1フレームあたり何ビット使うか。
Capture Audio 音声を録音するかどうか。
Bitrate 音声の音質。1フレームあたり何ビット使うか。

操作パネル

ウィンドウ上段にて録画の開始・終了および編集(GIFのみ)ができます。

録画はゲームの再生中にしかできないため注意してください。 また、シーンカメラを録画したい場合にはシーンビューを表示している必要があります。

GIFの場合には録画後にスライダーにてシークが、"<"ボタンおよび">"ボタンでコマ送りができます。 フレームを選択後、"["ボタンおよび"]"ボタンで編集の開始フレームおよび終了フレームを指定できます。 設定した開始フレームおよび終了フレームに対し、"Erase"コマンドで削除、"Clip"コマンドで切り抜きが可能です。 録画内容が不要なら"Reset"コマンドで内容を破棄してください。

録画および編集が完了したら"Save"ボタンで保存場所を選び、保存してください。

ソースコード

GitHubを参照。

github.com

ライセンスはMITにしてあります。

本当は著作権表示をしてほしいとも思わないのですが、 パブリックドメインだと免責あたりがどうなっているのかよくわからなかったのと、 本家FrameCapturerやその内部で使用しているライブラリとの関係で何かあると嫌だったので、MITライセンスにしました。 本家が使ってる以上、これで問題が起こることはないだろう、という推測。

ユニティちゃんライセンス

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

おわりに

実を言うと、実装の大部分はけっこう前に終わっていたのだけど、 とあるバグを経験してからエディタ拡張についていろいろと気になり、 調べては記事を書いて、を繰り返していたら遅くなってしまった・・・。 おかげでエディタ拡張についての知識はだいぶついたのだけれども。

今回初めてオープンソース関連でいろいろとしたので、 もしかすると何か常識的にやばいことをしてしまっているかもしれません。 何か気づいたことがあれば教えてもらえると助かります。



執筆時のUnityのバージョン:5.4.0f3