Table of Contents

Запуск симуляционного прогона с использованием файлов EIF в Unity

В этой статье описывается, как использовать файлы EIF в Unity для симуляционного прогона, что позволяет выполнять большую часть разработки на компьютере и визуально оценивать результат.

Перед началом

Симуляционный прогон использует файлы EIF в качестве входных данных, поэтому перед началом необходимо записать файл EIF:

Также необходимо понимать:

Активация frame player в сессии

ARSession.AssembleOptions предоставляет различные способы настройки комбинации компонентов сессии. Один из способов — установить AssembleOptions.FrameSource в значение FramePlayer для активации компонента frame player, что позволит использовать файлы EIF для симуляционного прогона.

Например:

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

Также можно в редакторе, выбрав AR Session (EasyAR), в окне Inspector изменить соответствующую опцию в Assemble Options:

alt text

Таким образом, при запуске сессии будет активирован компонент frame player, и другие компоненты frame source выбраны не будут.

Эффект воспроизведения файла EIF с использованием frame player показан в этом видео:

В этом видео показан эффект картографии плотного пространства в движении на компьютере с использованием frame player. Слева — вид Hierarchy, в центре — вид Scene, справа — вид Game. Содержимое вида Game идентично тому, что пользователь видит в реальном мире на телефоне.

Во время воспроизведения файла EIF все компоненты AR-функций в сессии могут работать нормально, содержимое сцены и логика взаимодействия также функционируют корректно. Это позволяет выполнять большую часть разработки на компьютере и визуально оценивать результат.

Совет

Эффект, наблюдаемый при воспроизведении EIF на компьютере с использованием frame player, в основном соответствует эффекту на телефоне во время записи файла EIF.

Важно

Эффект работы при воспроизведении EIF в сцене зависит от устройства, использованного для записи, и выбранного на нем источника кадров (frame source) на тот момент. Поэтому при записи файлов EIF рекомендуется использовать устройство, идентичное или близкое к целевому, чтобы гарантировать соответствие эффекта воспроизведения эффекту на целевом устройстве. Также важно обратить внимание на то, была ли активирована функция отслеживания движения в сцене записи. Если отслеживание движения не было включено при записи, его нельзя будет включить при воспроизведении, и AR-функции, зависящие от отслеживания движения (например, карты плотного пространства, Mega и т.д.), не будут работать так же, как на устройстве.

Воспроизведение при запуске сессии

По умолчанию, при запуске сессии 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:

alt text

Если файл не указан или путь к файлу недействителен, frame player завершит работу с ошибкой при запуске сессии и выведет сообщение в журнал:

File not found:

Ручное воспроизведение

Чтобы управлять временем начала воспроизведения вручную, можно установить FramePlayer.enabled в значение false перед запуском сессии.

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

Также можно в редакторе, выбрав AR Session (EasyAR), в окне Inspector снять флажок Enabled у компонента Frame Player:

alt text

Когда потребуется начать воспроизведение, используйте 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)

Используйте Seek(double) для перехода к определенной временной точке и начала воспроизведения с нее.

Например, переход к точке через 5 секунд:

player.Seek(player.Time + 5);
Примечание

После перехода воспроизведение может начаться не с точной указанной временной точки. Это зависит от способа кодирования файла EIF и интервала ключевых кадров.

Не все файлы EIF поддерживают переход (seek). Можно использовать свойство IsSeekable для проверки, поддерживает ли текущий воспроизводимый файл EIF переход.

Примечание

Только файлы EIF, записанные в формате H264 и с нормальным вызовом остановки записи, поддерживают переход. Если файл EIF не поддерживает переход, вызов Seek(double) не даст никакого эффекта.

Управление скоростью воспроизведения

Используйте свойство Speed для управления скоростью воспроизведения.

Например, увеличение скорости воспроизведения на 0.1x:

player.Speed += 0.1;

Не все файлы EIF поддерживают изменение скорости воспроизведения. Можно использовать свойство IsSpeedChangeable для проверки, поддерживает ли текущий воспроизводимый файл EIF управление скоростью.

Примечание

Только файлы EIF, записанные в формате H264 и с нормальным вызовом остановки записи, поддерживают изменение скорости. Если файл EIF не поддерживает управление скоростью, установка Speed не даст никакого эффекта.

Связанные темы