Table of Contents

Unity で EIF ファイルを使ってシミュレーション実行する

この記事では、Unity で EIF ファイルを使ってシミュレーション実行する方法を説明します。これにより、開発作業の大部分を PC 上で行い、結果を直感的に確認できます。

始める前に

シミュレーションでは EIF ファイルを入力として使うため、まず EIF ファイルを録画しておく必要があります。

また、次の内容も理解しておく必要があります。

session の frame player を有効にする

ARSession.AssembleOptions では、session コンポーネントの組み合わせを構成する複数の方法が用意されています。その 1 つが AssembleOptions.FrameSourceFramePlayer に設定して frame player コンポーネントを有効にし、EIF ファイルを使ったシミュレーション実行を可能にする方法です。

たとえば次のようにします。

Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;

エディタでも、AR Session (EasyAR) を選択し、Inspector ウィンドウの Assemble Options で該当項目を変更できます。

alt text

これで 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.FilePathTypeFramePlayer.FilePath で設定できます。

たとえば次のようにします。

var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;

エディタでも、AR Session (EasyAR) を選択し、Inspector ウィンドウの Frame Player コンポーネントで該当項目を変更できます。

alt text

ファイルが指定されていない場合やファイルパスが無効な場合、session 起動時に frame player の起動に失敗し、エラーログが出力されます。

File not found:

手動再生

再生のタイミングを手動で制御したい場合は、session 起動前に FramePlayer.enabledfalse に設定できます。

Session.GetComponent<FramePlayer>().enabled = false;

エディタでも、AR Session (EasyAR) を選択し、Inspector ウィンドウの Frame Player コンポーネントで Enabled のチェックを外せます。

alt text

再生したいときは Play() を使って再生を開始します。

たとえば次のようにします。

if (Session.Assembly.FrameSource is FramePlayer player)
{
    player.Play();
}

Play() を呼ぶたびに、前回の再生は停止され(すでに再生済みなら)、先頭から再生が始まります。

注意

新しいデータを再生しても、シーン内の元のデータは消去されません。AR コンポーネントの状態もリセットされず、カメラデータが前のデータの停止位置から新しいデータの開始位置へ突然飛んだように振る舞います。

これは一部の機能にはあまり影響しませんが、モーション追跡に依存する機能(たとえば密な空間マッピング、Mega など)では機能状態が異常になる可能性があり、実行結果に影響します。そのため、新しいデータを再生する前に session を再起動して、すべての AR コンポーネントの状態をリセットすることを推奨します。

一時停止と再開

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 ファイルが seek に対応しているわけではありません。IsSeekable プロパティを使って、現在再生中の EIF ファイルが seek に対応しているか確認できます。

注記

H264 形式で録画され、録画停止が正しく行われた EIF ファイルだけが seek に対応しています。EIF ファイルが seek に対応していない場合、Seek(double) を呼び出しても何も起こりません。

再生速度の制御

Speed プロパティを使って再生速度を制御します。

たとえば、元の速度より 0.1 倍速くするには次のようにします。

player.Speed += 0.1;

すべての EIF ファイルが再生速度の制御に対応しているわけではありません。IsSpeedChangeable プロパティを使って、現在再生中の EIF ファイルが再生速度の制御に対応しているか確認できます。

注記

H264 形式で録画され、録画停止が正しく行われた EIF ファイルだけが再生速度制御に対応しています。EIF ファイルが対応していない場合、Speed を設定しても何も起こりません。

関連トピック

  • session 検証ツールを使う を試してみてください。このツールには簡単な EIF プレーヤーが含まれており、EIF ファイルを使ったシミュレーション実行をよりすばやく行えます