Table of Contents

Unity で EIF ファイルを記録する

この記事では、Unity でシミュレーション実行に使用する EIF ファイルを記録する方法について説明します。

開始する前に

記録の開始

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($"Recording started: {file}");
});

起動失敗のイベントはありませんが、FrameRecorder.StatusError かどうかを確認することで確認できます。

重要

シーン内で EIF を再生したときの実行効果は、記録に使用したデバイスと、そのデバイスで当時選択されていた frame source に依存します。そのため、EIF ファイルを記録する際には、ターゲットデバイスと同一または類似のデバイスを使用して記録し、再生時の効果がターゲットデバイス上の効果と一致することを保証することをお勧めします。同時に、記録シーンでのモーショントラッキング機能が有効になっているかどうかに特に注意する必要があります。記録時にモーショントラッキング機能が有効になっていない場合、再生時にもモーショントラッキング機能は有効にできず、モーショントラッキングに依存する AR 機能(高密度空間マップ、Mega など)もデバイス上で一貫して動作することはできません。

記録の停止

FrameRecorder.enabled = false を使用して記録を停止します。例:

frameRecorder.enabled = false;

この操作により記録は即時停止し、ファイルの書き込みが完了するまでブロックされます。

重要

必ず記録停止を呼び出す必要があります。そうしないと、記録ファイルの書き込みが不完全になり、一部の機能またはファイル全体が使用できなくなる可能性があります:

  • 記録形式が H264 の場合、EIF ファイルは指定された時間点にジャンプ(シーク)して再生できず、最初から再生する必要があります。
  • 記録形式が Obsolete の場合、EIF ファイルは使用できません。

ファイルの保存とエクスポート

記録ファイルの完全な実際のパスを取得するには、OnRecording イベントを使用します:

frameRecorder.OnRecording.AddListener((file) =>
{
    Debug.Log($"Recording started: {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 のチェックを外した後に設定することもできます:

alt text

ヒント

FrameRecorder.RecordingConfiguration.FilePath を使用して、ファイルの保存ディレクトリとファイル名(拡張子なし)を変更できます。ファイル拡張子は記録形式に基づいて自動的に追加されます。

  • 記録形式が H264 の場合、ファイル拡張子は .mkveif
  • 記録形式が Obsolete の場合、ファイル拡張子は .eif

ファイルがアプリケーションの永続化データパスや他のアプリケーション専用パスに保存されている場合、以下の方法でファイルを PC にエクスポートできます:

  • Android プラットフォームでは、USB で PC に接続後、adb pull またはその他の方法でファイルを PC にエクスポートできます。ファイルは通常 /sdcard/Android/data/<アプリパッケージ名>/files の下にあります。
  • iOS プラットフォームでは、Xcode の Devices ウィンドウを使用してファイルを PC にエクスポートするか、iTunes または Finder のファイル共有を使用してアプリの専用ディレクトリにアクセスできます。
  • コードを使用して、Android のダウンロードディレクトリや iOS のフォトライブラリなどのパブリックディレクトリにファイルを保存します。
注記

iOS アプリで、iTunes または Finder のファイル共有を使用してアプリの専用ディレクトリにアクセスしたい場合、ビルド前に XCode プロジェクトの Info.plistUIFileSharingEnabled キーを追加し、値を YES に設定する必要があります:

alt text

追加後に表示されるテキストが追加した文字列と異なることがありますが、これは正常です。

記録形式の変更

記録形式は FrameRecorder.Configuration.Format で変更します。記録開始前に設定する必要があります。

例えば、以下のコードは記録形式を強制的に H264 に設定する方法を示しています:

frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;

エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Format を変更することもできます:

alt text

注記

H264 は一部のデバイス(Windows など)では使用できません。一般的には Auto を使用することを推奨します。これにより、デバイスに基づいて適切な形式が自動的に選択されます。

注記

XREAL では、Obsolete 形式で記録されたデータはシミュレーション実行に使用できず、問題のフィードバック専用です。

  • シミュレーション実行では、H264 形式で記録されたデータを使用する必要があります。
  • 問題のフィードバックでは、Obsolete 形式で記録されたデータを使用する必要があります。

現在の記録形式を確認するには、RecordingFormat を使用できます。

セッション起動時の自動記録

セッション起動前に AutoStarttrue に設定すると、セッション起動時に記録を開始できます。例:

frameRecorder.AutoStart = true;

エディターでは、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Recorder の Auto Start にチェックを入れることもできます:

alt text

注記

エディター上で 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 ファイルを記録する際にはモーショントラッキング機能を有効にすることをお勧めします。

次のステップ