#はじめに
GameSceneの映像をカメラロールに保存する時、プラットフォーム別の対応をしたくなかったので利用しました。
サンプルシーンと公式リファレンスを参考にすれば大体わかりますが、英語読むの大変だったので自分用にまとめておきます。
#NatCorder
UnityEngine用の軽量ビデオ録画API。
プッシュアーキテクチャで設計されているため、3つの簡単なステップでビデオを録画できます。
公式API
https://docs.natsuite.io/natcorder/
こちらから購入できます。
https://assetstore.unity.com/packages/tools/integration/natcorder-video-recording-api-102645
##録画開始方法
###Recorderクラス
作成したい形式のRecorderクラスインスタンスを作ります。
ここでサイズやフレーム数を決めます。音声も含めたい場合は引数で渡してあげてください。
mp4Recorder = new MP4Recorder(Camera.main.pixelWidth, Camera.main.pixelHeight, 30);
NatCorderでは下記の形式が用意されています。
- MP4
- GIF
- HEVC
- JPG
- WAV
###RealtimeClock
NatCorderで用意されているTimestampを取得するクラスです。
clock = new RealtimeClock();
###CameraInput
UnityCameraの映像を使って録画したい場合に使うクラスです。
コンストラクターにRecorderクラスとRealtimeClock、撮影で使うUnityCameraを引数に渡してあげます。
この時配列でUnityCameraを渡すことで複数の映像をブレンドしてくれます。
cameraInput = new CameraInput(mp4recorder, clock, Camera.main);
CameraInputのインスタンスを生成した時点で録画が開始されます。
##録画停止方法
###CameraInput.Dispose
録画を停止したい場合に使う関数です。
RecorderクラスでFinishWriting()
を呼び出す前に必ず行います。
cameraInput.Dispose();
###IMediaRecorder.FinishWriting
フレームのコミットを終了する関数です。
処理が終了すると保存先のpathを返してくれます。
var path = await recorder.FinishWriting();
#サンプルコード
とりあえずこんなんで動きます。
using UnityEngine;
using NatSuite.Recorders.Clocks;
using NatSuite.Recorders.Inputs;
using MP4Recorder = NatSuite.Recorders.MP4Recorder;
public class MovieGenerater
{
private static MovieGenerater instance;
private MP4Recorder mp4recorder;
private CameraInput cameraInput;
public static MovieGenerater Instance
{
get
{
if (instance == null) instance = new MovieGenerater();
return instance;
}
}
public void StartRecording()
{
mp4recorder = new MP4Recorder(Camera.main.pixelWidth, Camera.main.pixelHeight, 30);
cameraInput = new CameraInput(mp4recorder, new RealtimeClock(), Camera.main);
Debug.Log("Recording Start");
}
public async void StopRecording()
{
cameraInput.Dispose();
var path = await mp4recorder.FinishWriting();
Debug.Log($"Saved recording to: {path}");
}
}
##使い方
ボタン等のタイミングでStartRecording();
を呼べば撮影が開始されます。
終了したい場合はStopRecording();
を使ってください。
正常に保存が成功すると保存先のpathが返ってくるので確認してください。
#まとめ
たったこれだけでプラットフォームを気にせず使えるのでオススメのアセットです!
カメラアプリやARアプリで使ったり、RenderTextureの録画をしたいときに便利そう。。
余談になりますが同じ作者さんのNatShareというAssetを使うと、SNS共有まで対応幅が広がるので気になった方は使ってみてください!
気が向いたらNatShareの記事もかきます!
NatShareの記事投稿しました。
https://qiita.com/Formi/items/de2afa7fab89bbee8259