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

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

ファイルが指定されていない場合、またはファイルパスが無効な場合、セッション起動時にフレームプレーヤーは起動に失敗し、エラーログを出力します:
File not found:
手動再生
再生タイミングを手動で制御する場合は、セッション起動前に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コンポーネントの状態をリセットすることをお勧めします。
一時停止と再開
FramePlayer.enabledを使用して再生の一時停止と再開を制御します。
例:FramePlayer.enabled = falseを設定して再生を一時停止:
player.enabled = false;
再生を一時停止すると、すべてのAR機能コンポーネントは動作を停止します。シーン内のコンテンツとインタラクションロジックは必ずしも停止せず、コンテンツ自体に依存します。再生を再開すると、AR機能コンポーネントは一時停止した位置から動作を再開します。
再生停止
Stop()を使用して再生を停止します。
player.Stop();
再生が停止すると、すべてのAR機能コンポーネントは動作を停止します。シーン内のコンテンツとインタラクションロジックは必ずしも停止せず、コンテンツ自体に依存します。
指定時間点へのジャンプ再生(シーク)
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を設定しても効果はありません。
関連トピック
- セッションバリデーションツールの使用を試す - このツールにはシンプルなEIFプレーヤーが含まれており、より迅速にEIFファイルを使用したシミュレーション実行が可能です