Проблема с дрейфом / отлетом объекта AR Unity AR Foundation - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в разработке AR, так что извините за вопрос новичка. Я создаю объект AR перед камерой, который появляется нормально, но в какой-то момент объект начинает дрейфовать в случайных направлениях. Может ли кто-нибудь помочь мне с этим вопросом? Я искал довольно долго; Мне не удалось найти исправление.

Для создания объекта

prefabInstance = Instantiate(placeObject);
GetComponent<ARSessionOrigin>().MakeContentAppearAt(prefabInstance.transform, new Vector3(0, -0.76f, 3.35f), Quaternion.identity);

Я хочу встряхнуть, чтобы разбить объект на части. После того, как объект раскололся, я перемещаю их в другие области. Я перемещаю только родительский объект, а части находятся в дочернем объекте.

Код перемещения

int temp = UnityEngine.Random.Range(0, ReferenceSpawnPoint.Length); 
gObject.transform.position = new Vector3(ReferenceSpawnPoint[temp].position.x, ReferenceSpawnPoint[temp].position.y, ReferenceSpawnPoint[temp].position.z); 
float y = UnityEngine.Random.Range(0, 360); 
float z = UnityEngine.Random.Range(-10, 10); 
gObject.transform.rotation = Quaternion.Euler(0, y, 0);

Я также прикрепляю ссылку на видео; пожалуйста, посмотрите, и вы поймете, о чем я говорю ссылка на видео . Для удобства начните с 0:30 se c mark.

Мы будем благодарны за вашу помощь.

Также иногда у меня появляется черный экран; Означает ли это, что сеанс AR не инициализирован?

Версии плагинов / инструментов:

  • Unity: 2019.2.7f2
  • XR ARCore: 3.1.3
  • XR AR Foundation: 3.1.3
  • XR ARKit: 3.1.3
  • Старые помощники ввода XR: 2.1.4

1 Ответ

1 голос
/ 05 июня 2020

Похоже, вы неправильно размещаете объект. Лучше использовать raycasting и разместить 3D-объект в некоторой позиции, определяемой пользовательским вводом, например касанием экрана.

В примере сцены AR Foundation есть сценарий с именем PlaceOnPlane.cs, который показывает, как вы можете обнаружить когда пользователь прикасается к экрану, а затем направляет лучи из него в мир для интимности игрового объекта:

if (Input.touchCount == 1) {
    if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
        {
            // Raycast hits are sorted by distance, so the first one
            // will be the closest hit.
            var hitPose = s_Hits[0].pose;

            if (spawnedObject == null)
            {
                spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
            }
        }

После создания экземпляра модели в "реальной" позиции, такой как hitPose.position, вы не должны ' Я больше не вижу его дрейфа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...