Что Я пробовал:
Вручную:
Я создал сферу в точке (1, 2, 3) в Unity Inspector как дочерний элемент целевого изображения Vuforia, и он появился в правильной позиции.
Через скрипт: Однако при создании сферы с помощью скрипта ее положение не соответствует ожиданиям.
Код:
В моем скрипте я пытаюсь расположить сферу следующим образом:
Код: Выделить всё
sphere.transform.position = targetTransform.position + localPosition;
Полный сценарий:
Вот соответствующая часть моего кода для создания и позиционирования сферы:
Код: Выделить всё
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;
}
Код: Выделить всё
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