Unity で EIF ファイルを録画する
この記事では、シミュレーション実行に使用するために Unity で EIF ファイルを録画する方法について説明します。
開始する前に
- EIF ファイルの録画とシミュレーション実行 の基本概念を理解していること
- AR セッション の基本概念、構成、およびワークフローを理解していること
- セッションコンポーネントへのアクセス を通じて録画コンポーネントへのアクセス方法を理解していること
録画の開始
FrameRecorder.enabled = true を使用して録画を開始します。例:
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
ここで、ARAssembly.FrameRecorder が存在するかどうかを最初に確認する必要があることに注意してください。
注記
ARAssembly.FrameRecorder は、FramePlayer を使用する場合など、まれな状況では使用できません。
FrameRecorder.enabled のデフォルト値は false で、録画がオフになっていることを示します。エディターで手動で設定しても無効です。
録画は、セッションの実行中に FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready の場合にのみ開始されます。
FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready の場合、OnReady イベントを使用して録画の準備が整うのを待つことができます。
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// 録画を開始できます
});
OnRecording イベントを使用して起動の成功を確認できます:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"録画が開始されました: {file}");
});
起動失敗のイベントはトリガーされませんが、FrameRecorder.Status が Error かどうかを確認することで確認できます。
重要
シーン内で EIF を再生したときの実行効果は、録画時に使用したデバイスおよびそのデバイスで当時選択された frame source に依存します。したがって、EIF ファイルを録画する際には、ターゲットデバイスと同じか類似のデバイスを使用して録画し、再生時の効果がターゲットデバイス上の効果と一致するようにすることをお勧めします。同時に、録画シーンでモーション追跡機能が有効になっているかどうかに特に注意を払う必要があります。録画時にモーション追跡機能が有効になっていない場合、再生時にもモーション追跡機能は有効にならず、モーション追跡に依存する AR 機能(高密度空間マップ、Mega など)もデバイス上と同様に動作しません。
録画の停止
FrameRecorder.enabled = false を使用して録画を停止します。例:
frameRecorder.enabled = false;
この操作により録画は即時停止し、ファイル書き込みが完了するまでブロックされます。
重要
録画停止を必ず呼び出してください。そうしないと録画ファイルが不完全に書き込まれ、一部の機能またはファイル全体が使用できなくなる可能性があります:
ファイルの保存とエクスポート
OnRecording イベントを使用して、録画ファイルの完全な実パスを取得できます:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"録画が開始されました: {file}");
});
デフォルト設定では、録画ファイルはアプリケーションの永続化データパスに保存されます。Application.persistentDataPath を介してこのパスにアクセスできます。
FrameRecorder.Configuration.FilePath を変更することで、録画ファイルの保存パスを変更できます。このパスは録画開始前に設定する必要があり、AutoFilePath をオフにした後にのみ有効になります。ディレクトリは事前に作成しておく必要があります。
重要
録画ファイルの保存ディレクトリが存在し、アプリケーションが書き込み可能であることを保証する必要があります。そうしないと、録画開始時に失敗します。
たとえば、次のコードは、カスタムディレクトリに録画ファイルを保存し、セッションで使用される FrameSource のタイプと現在時刻に基づいてファイル名を生成する方法を示しています:
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath);
}
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.Configuration.AutoFilePath = false;
frameRecorder.Configuration.FilePath.Type = WritablePathType.Absolute;
frameRecorder.Configuration.FilePath.FolderPath = SavePath;
frameRecorder.Configuration.FilePath.FileName = ARSessionFactory.DefaultName(Session.Assembly.FrameSource.GetType()).Replace(" ", "") + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss.fff");
frameRecorder.enabled = true;
エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Recorder の Auto File Path のチェックを外した後に設定することもできます:

ヒント
FrameRecorder.RecordingConfiguration.FilePath を使用して、ファイルの保存ディレクトリとファイル名(拡張子なし)を変更できます。ファイル拡張子は録画形式に基づいて自動的に追加されます。
ファイルがアプリケーションの永続化データパスや他のアプリケーションのプライベートパスに保存されている場合、次の方法でファイルをコンピューターにエクスポートできます:
- Android プラットフォームでは、USB でコンピューターに接続後、
adb pullまたはその他の方法を使用してファイルをコンピューターにエクスポートできます。ファイルは通常/sdcarad/Android/data/<アプリパッケージ名>/filesの下にあります。 - iOS プラットフォームでは、Xcode の Devices ウィンドウを使用してファイルをコンピューターにエクスポートするか、iTunes または Finder のファイル共有を介してアプリケーションのプライベートディレクトリにアクセスできます。
- コードを使用して、Android のダウンロードディレクトリや iOS のフォトライブラリなどのパブリックディレクトリにファイルを保存します。
注記
iOS アプリの場合、iTunes または Finder のファイル共有を介してアプリケーションのプライベートディレクトリにアクセスしたい場合は、ビルド前に XCode プロジェクトの Info.plist に UIFileSharingEnabled キーを追加し、値を YES に設定する必要があります:

追加後に表示されるテキストが追加した文字列と異なる場合がありますが、これは正常です。
録画形式の変更
FrameRecorder.Configuration.Format で録画形式を変更します。録画開始前に設定する必要があります。
たとえば、次のコードは録画形式を強制的に H264 に設定する方法を示しています:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Format を変更することもできます:

注記
XREAL では、Obsolete 形式で録画されたデータはシミュレーション実行には使用できず、問題のフィードバックにのみ使用されます。
RecordingFormat を使用して、現在の録画形式を確認できます。
セッション起動時の自動録画
セッション起動前に AutoStart を true に設定すると、セッション起動時に録画を開始できます。例:
frameRecorder.AutoStart = true;
エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Recorder の Auto Start をチェックすることもできます:

注記
エディター上で FrameRecorder.enabled を変更することは無効です。
Mega で使用可能なデータ
Mega を使用する場合、EIF および関連ファイルの内容に特別な要件があり、古いバージョンの Unity プラグインにはこれらの機能が統合されていなかったため、それらのバージョンで録画されたデータは Mega では使用できません。
以下の状況で録画されたデータは Mega で使用できます:
- Unity プラグイン 4000 以降で録画されたデータ
- Mega Toolbox で録画されたデータ
- データが Obsolete 形式で録画されている場合(例: ファイル
x.eif)、同じディレクトリにx.eif.jsonファイルが同時に存在する必要があります
以下の状況で録画されたデータは Mega では使用できません:
- Unity プラグイン 4.6 以前で録画されたデータ
- ネイティブ EasyAR Sense を使用し、Unity プラグインと同じ内容のデータが追加されていない場合
また、Mega はモーション追跡を使用せずに動作できますが、実行効果は異なります。ほとんどの使用シナリオで再生時の効果が期待に沿うように、EIF ファイルを録画する際にはモーション追跡機能を有効にすることをお勧めします。
次のステップ
- EIF ファイルを使用したシミュレーション実行 を試す
- セッション検証ツール を使用する