Проблема с позиционированием сферы относительно целевого изображения Vuforia в Unity и HoloLensC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с позиционированием сферы относительно целевого изображения Vuforia в Unity и HoloLens

Сообщение Anonymous »

Я разрабатываю AR-приложение, используя Unity, Vuforia и HoloLens. Моя цель — создать сферу в определенной позиции относительно целевого изображения Vuforia (например, (1, 2, 3) относительно начала целевого изображения).
Что Я пробовал:
Вручную:
Я создал сферу в точке (1, 2, 3) в Unity Inspector как дочерний элемент целевого изображения Vuforia, и он появился в правильной позиции.
Через скрипт: Однако при создании сферы с помощью скрипта ее положение не соответствует ожиданиям.
Код:
В моем скрипте я пытаюсь расположить сферу следующим образом:

Код: Выделить всё

sphere.transform.position = targetTransform.position + localPosition;
Здесь targetTransform — это Transform ObserverBehaviour (цель Vuforia). Несмотря на это, сфера отображается в другом месте по сравнению со сферой, размещенной вручную.
Полный сценарий:
Вот соответствующая часть моего кода для создания и позиционирования сферы:

Код: Выделить всё

public class SphereManager
{
private GameObject sphere;
private Vector3 localPosition;

public SphereManager(Vector3 position)
{
localPosition = position;
}

public void CreateSphere(Transform targetTransform)
{
if (sphere == null)
{
sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.SetParent(targetTransform, false);
sphere.transform.position = targetTransform.position + localPosition;
sphere.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
}
}

public void DestroySphere()
{
if (sphere != null)
{
GameObject.Destroy(sphere);
sphere = null;
}
}

public bool IsSphereActive() => sphere != null;
}
И скрипт, обрабатывающий обнаружение цели Vuforia:

Код: Выделить всё

public class SphereCreator : MonoBehaviour
{
public Vector3 pose = Vector3.zero;
private SphereManager sphereManager;
private ObserverBehaviour observerBehaviour;

void Start()
{
sphereManager = new SphereManager(pose);
observerBehaviour = GetComponent() ?? GetComponentInChildren() ?? GetComponentInParent();

if (observerBehaviour)
{
observerBehaviour.OnTargetStatusChanged += OnTargetStatusChanged;
}
else
{
Debug.LogWarning("ObserverBehaviour component not found.");
}
}

private void OnTargetStatusChanged(ObserverBehaviour behaviour, TargetStatus targetStatus)
{
if (targetStatus.Status == Status.TRACKED || targetStatus.Status == Status.EXTENDED_TRACKED)
{
sphereManager.CreateSphere(behaviour.transform);
}
else
{
sphereManager.DestroySphere();
}
}

private void OnDestroy()
{
if (observerBehaviour != null)
{
observerBehaviour.OnTargetStatusChanged -= OnTargetStatusChanged;
}
}
}
Проблема:
Сфера, созданная с помощью скрипта, не совпадает со сферой, помещенной вручную в Инспекторе. Как мне установить положение сферы в скрипте, чтобы оно соответствовало сфере, размещенной вручную?

Подробнее здесь: https://stackoverflow.com/questions/791 ... y-and-holo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»