Unity で EIF ファイルを使用したシミュレーション実行
この記事では、Unity で EIF ファイルを使用してシミュレーション実行する方法を紹介します。これにより、開発作業の大部分を PC 上で行い、効果を視覚的に確認できます。
開始する前に
シミュレーション実行では入力として EIF ファイルを使用するため、開始前にまず EIF ファイルを記録する必要があります:
- EIF ファイルの記録を参照して EIF ファイルを記録してください
また、以下について理解しておく必要があります:
- EIF ファイルの記録とシミュレーション実行の基本概念について
- AR Session の基本概念、構成、ワークフローについて
- session 内の AR 機能コンポーネントへのアクセスで記録コンポーネントへのアクセス方法を理解する
session の frame player を有効化する
ARSession.AssembleOptions は session コンポーネントの構成方法を複数提供しており、その一つは AssembleOptions.FrameSource を FramePlayer に設定して frame player コンポーネントを有効化する方法です。これにより EIF ファイルを使用したシミュレーション実行が可能になります。
例:
Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;
エディター上では、AR Session (EasyAR) を選択し、Inspector ウィンドウで Assemble Options の対応するオプションを変更できます:

これにより session 起動時に frame player コンポーネントが有効化され、他の frame source コンポーネントは選択されません。
frame player で EIF ファイルを再生する効果は以下の動画で確認できます:
この動画は frame player を使用して PC 上で高密度空間マッピングを動作させる効果を示しています。左側は
Hierarchyビュー、中央はSceneビュー、右側はGameビューです。Gameビューの内容はユーザーが現実世界でスマートフォンで見る内容と同じです。
EIF ファイルの再生中、session 内の各 AR 機能コンポーネントは正常に動作し、シーン内のコンテンツやインタラクションロジックも正常に動作します。これにより、開発作業の大部分を PC 上で行い、効果を視覚的に確認できます。
ヒント
PC 上で frame player を使用して EIF を再生した際の効果は、EIF ファイル記録時のスマートフォン上の効果と基本的に一致します。
重要
EIF 再生時の実行効果は、記録に使用したデバイスおよびデバイス上で使用された frame source に依存します。そのため、EIF ファイルの記録時には、ターゲットデバイスと同じか類似のデバイスを使用して記録し、再生時の効果がターゲットデバイス上での効果と一致するようにすることを推奨します。また、記録シーンでのモーショントラッキング機能の有効/無効状態を特に確認してください。記録時にモーショントラッキング機能が有効になっていない場合、再生時にも有効にできず、モーショントラッキングに依存する AR 機能(高密度空間マップ、Mega など)はデバイス上と同じように動作しません。
session 起動時に再生する
デフォルトでは session 起動時に frame player は自動的に EIF ファイルの再生を開始しますが、再生前に EIF ファイルパスを指定する必要があります。FramePlayer.FilePathType と FramePlayer.FilePath プロパティで設定できます。
例:
var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;
エディター上では、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Player コンポーネントの対応するオプションを変更できます:

ファイルが指定されていない場合、またはファイルパスが無効な場合、session 起動時に frame player は起動に失敗し、エラーログを出力します:
File not found:
手動再生
再生タイミングを手動で制御する場合、session 起動前に FramePlayer.enabled を false に設定します。
Session.GetComponent<FramePlayer>().enabled = false;
エディター上では、AR Session (EasyAR) を選択し、Inspector ウィンドウで Frame Player コンポーネントの Enabled のチェックを外します:

再生が必要な時点で、Play() を使用して再生を開始します。
例:
if (Session.Assembly.FrameSource is FramePlayer player)
{
player.Play();
}
Play() を呼び出すたびに、前回の再生(再生中の場合)を停止して最初から再生を開始します。
注意
新しいデータの再生時、シーン内の既存データはクリアされません。AR コンポーネントの状態もリセットされず、カメラデータが前のデータの停止位置から突然新しいデータの開始位置にジャンプしたかのように動作します。
これは一部の機能には大きな影響を与えないかもしれませんが、モーショントラッキングに依存する機能(高密度空間マップ、Mega など)では機能状態の異常を引き起こし、実行効果に影響を与える可能性があります。そのため、新しいデータを再生する前に、すべての AR コンポーネントの状態をリセットするために session を再起動することを推奨します。
一時停止と再開
FramePlayer.enabled を使用して再生の一時停止と再開を制御します。
例:FramePlayer.enabled = false を設定して再生を一時停止:
player.enabled = false;
再生を一時停止すると、すべての AR 機能コンポーネントは動作を停止します。シーン内のコンテンツやインタラクションロジックは必ずしも停止せず、コンテンツ自体に依存します。再生を再開すると、AR 機能コンポーネントは一時停止した位置から動作を再開します。
再生の停止
Stop() を使用して再生を停止します。
player.Stop();
再生を停止すると、すべての AR 機能コンポーネントは動作を停止します。シーン内のコンテンツやインタラクションロジックは必ずしも停止せず、コンテンツ自体に依存します。
指定時間点へのジャンプ再生(seek)
Seek(double) を使用して指定時間点にジャンプして再生します。
例:5 秒後にジャンプ:
player.Seek(player.Time + 5);
注記
ジャンプ後、正確な時間点から再生が開始されない場合があります。これは EIF ファイルのエンコード方式とキーフレーム間隔に依存します。
すべての EIF ファイルがジャンプ再生をサポートしているわけではありません。IsSeekable プロパティを使用して、現在再生中の EIF ファイルがジャンプ再生をサポートしているかどうかを確認できます。
注記
H264 形式で記録され、かつ正常に記録停止が呼び出された EIF ファイルのみがジャンプ再生をサポートします。EIF ファイルがジャンプ再生をサポートしていない場合、Seek(double) を呼び出しても効果はありません。
再生速度の制御
Speed プロパティを使用して再生速度を制御します。
例:再生速度を元の速度から 0.1 倍増加:
player.Speed += 0.1;
すべての EIF ファイルが再生速度制御をサポートしているわけではありません。IsSpeedChangeable プロパティを使用して、現在再生中の EIF ファイルが再生速度制御をサポートしているかどうかを確認できます。
注記
H264 形式で記録され、かつ正常に記録停止が呼び出された EIF ファイルのみが再生速度制御をサポートします。EIF ファイルが再生速度制御をサポートしていない場合、Speed を設定しても効果はありません。
関連トピック
- session 検証ツールの使用を試してみてください。このツールにはシンプルな EIF プレイヤーが含まれており、より迅速に EIF ファイルを使用したシミュレーション実行が可能です