Добавление пользовательских данных во время записи на Unity для Android

API записи и воспроизведения позволяет записывать сеанс и использовать его вместо трансляции с камеры в реальном времени. Однако эти записи содержат только данные видео и датчиков. Вы также можете добавить пользовательские данные к записи сеанса и получить данные, возвращаемые вам во время воспроизведения, как если бы они были частью изображения с камеры.

ARCore не включает автоматически какие-либо пользовательские данные в записи. Скорее, он позволяет вам добавлять пользовательские данные в кадр ARCore во время записи и извлекать те же данные из кадра во время воспроизведения. Вы должны запрограммировать приложение таким образом, чтобы пользователь возвращал данные, которые он ожидает, при воспроизведении своего сеанса.

Примеры использования пользовательских данных

Добавление пользовательских данных к записям расширяет возможности ваших приложений дополненной реальности. Ниже приведены некоторые конкретные варианты использования.

Используйте AR на ходу

Раньше пользователи могли получать доступ к AR только в нужном месте и в нужное время. Если они хотели разместить лампу AR в своей гостиной, им приходилось физически стоять на месте, чтобы увидеть, как лампа может там выглядеть. С помощью настраиваемых треков они могут один раз записать свою гостиную и добавить в сцену виртуальную мебель, когда захотят.

Совместное создание дополненной реальности

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

Предпосылки

Прежде чем продолжить, убедитесь, что вы понимаете основные концепции AR и как настроить сеанс ARCore .

Инициализировать запись с пользовательскими данными

Выполните следующие действия, чтобы инициализировать запись с пользовательскими данными. Чтобы начать, остановить и проверить сеанс записи, см. Запись и воспроизведение сеанса AR .

  1. Получите ARCoreRecordingConfig .
  2. Создайте новую Track с пользовательским UUID . Все пользовательские данные будут сохранены здесь.
  3. Добавьте Track в ARCoreRecordingConfig , который вы создали во время настройки сеанса.
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
 Id = Guid.parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

Все новые дорожки обрабатываются как отдельные записи, причем каждая записанная дорожка занимает свой собственный UUID.

Необязательно: Настройте трек с дополнительными данными

В случае, если вы хотите идентифицировать его позже, вы можете настроить дорожку с дополнительными данными, описывающими запись сеанса. Например, вы можете «пометить» трек, добавив примечание, описывающее место и время, когда вы записали сеанс: «Этот сеанс был записан в торговом центре днем».

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

Необязательно: настройте дорожку с типом MIME.

Если ваше приложение должно быть совместимо с внешними инструментами, вы можете настроить дорожку с типом MIME , который описывает тип данных, записанных на дорожке. Если вы не укажете тип, данные будут отнесены к категории application/text . ARCore игнорирует тип MIME при чтении данных.

// Set a MIME type for compatibility with external tools.
ArTrack_setMimeType(ar_session, track, "text/csv");

Запись пользовательских дорожек данных

Все данные пользовательского трека записываются в Frame . Время, в которое вы записываете данные в кадр, совпадает с временем, в которое данные будут возвращены во время воспроизведения. Например, если вы RecordTrackData() со значением «A» в 00:07:02 , вы получите «A» на отметке 00:07:02 при воспроизведении дорожки.

Чтобы записать собственную дорожку данных, вызовите RecordTrackData() .

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  frame.RecordTrackData(trackGuid, lampData);
}

Воспроизведение пользовательских дорожек данных

Извлечение пользовательских данных из записи сеанса во время воспроизведения.

Инициализировать воспроизведение

Инициализация воспроизведения с пользовательскими данными аналогична инициализации воспроизведения записи обычного сеанса .

Возврат пользовательских данных

Вызовите GetUpdatedTrackData() , чтобы получить пользовательские данные, записанные в кадре. Можно извлечь данные нескольких дорожек из одного и того же кадра. Например, если вы вызвали RecordTrackData() два раза для одного и того же кадра во время записи, вы получите два экземпляра TrackData во время воспроизведения.

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

Как только TrackData окажется в объекте-контейнере, извлеките байты пользовательских данных.

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

Что дальше