Table of Contents

Симуляция выполнения с файлами EIF в Unity

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

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

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

Также нужно понимать:

Включение frame player у session

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

Например:

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

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

alt text

Тогда при запуске session будет включён компонент frame player вместо выбора другого компонента frame source.

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

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

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

Совет

Эффект при воспроизведении EIF с frame player на компьютере в основном такой же, как на телефоне во время записи файла 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) и измените соответствующую опцию в компоненте Frame Player в окне Inspector:

alt text

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

File not found:

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

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

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

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

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. Проверить, поддерживает ли текущий файл EIF seek, можно с помощью свойства IsSeekable.

Примечание

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

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

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

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

player.Speed += 0.1;

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

Примечание

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

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