Как мне сделать расположение префаба чётко над маркером: ошибка с расположением префаба в AR проекте?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: проблема состоит в том, что префаб появляется в разных местах и почти случайно
Логика приложения такая:
Сейчас ситуация такая: сначала пользователь сканирует qr код, из которого приложение получает json файл с ссылками фото + видео (это триггерная пара, при наведении на фото приложение должно воспроизводить поверх фото видео), при этом я делаю несколько экземпляров фото, чтобы исправить проблему с размерами VideoQuad (по итогу сам префаб нужного размера, но появляется не там, где нужно)
https://disk.yandex.ru/d/0Y52bvbz6xh4oA
По вводным: ссылка на zip архив проекта
По вводным: сделано на Unity 2021.3.45f1

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция Security Ответ

Если в AR-проекте префаб не становится четко над маркером, почти всегда проблема в системе координат: вы создаете объект не как дочерний объект anchor/marker, используете world position вместо local position или не учитываете pivot/scale префаба. В AR нужно привязывать контент к найденному трекуемому объекту, а не просто ставить его в мировые координаты один раз.

Для Unity + AR Foundation типовая логика такая: при обнаружении image marker берете transform tracked image и создаете prefab дочерним объектом. Тогда объект будет двигаться вместе с маркером.

private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs args)
{
    foreach (var image in args.added)
    {
        var obj = Instantiate(prefab, image.transform);
        obj.transform.localPosition = Vector3.zero;
        obj.transform.localRotation = Quaternion.identity;
        obj.transform.localScale = Vector3.one;
    }
}

private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs args) { foreach (var image in args.added) { var obj = Instantiate(prefab, image.transform); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; obj.transform.localScale = Vector3.one; } }

Если объект появляется рядом, проверьте pivot модели. У 3D-модели центр может быть не там, где вы ожидаете. Создайте пустой GameObject-контейнер, поставьте модель внутри него с нужным смещением, а уже контейнер используйте как prefab.

  • создавайте объект внутри transform маркера/anchor;
  • используйте localPosition, если объект дочерний;
  • проверьте pivot и scale модели;
  • не пересоздавайте prefab каждый кадр;
  • обновляйте позицию при tracking state, если маркер двигается.

Если маркер распознается нестабильно, улучшите изображение: контраст, уникальные детали, отсутствие бликов, достаточный физический размер. Также проверьте, что размер reference image задан правильно. Неверный physical size приводит к неправильному масштабу и видимому смещению.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно