Мне просто нужно было решить эту проблему, я смог заставить его работать методом ARSessionOrigin
MakeContentAppearAt()
, используя положение и поворот отслеживаемого изображения (я использую ARFoundation v3.0.0 preview 4).
Этот метод не очень хорошо документирован, после некоторых проб и ошибок я обнаружил, что вам нужно использовать localRotation
отслеживаемого изображения, а не мировое пространство rotation
, иначе ориентация будет неправильной.
Всякий раз, когда отслеживаемое изображение найдено или обновлено, я запускаю следующее:
void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
if(eventArgs.updated.Count > 0)
{
ARTrackedImage trackedImage = eventArgs.updated[0];
arSessionOrigin.MakeContentAppearAt(worldOrigin.transform, trackedImage.transform.position, trackedImage.transform.localRotation);
}
}
worldOrigin.transform
- это просто пустой игровой объект в позиции 0,0,0 без вращения.
Итак, этот код говорит: я хочу, чтобы преобразование worldOrigin в выглядело так, как если бы находилось в позиции / повороте отслеживаемого изображения, регулируя преобразование камеры AR для компенсации (worldOrigin.transform
немодифицированный).