Функция Vuforia OntrackingLost не работает, когда включен трекер устройств? - PullRequest
0 голосов
/ 11 февраля 2019

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

К сожалению, мы можемНе закрепляйте объект в Vuforia без использования обнаружения плоскости земли.

Более того, после «Включения обнаружения плоскости земли», расширенный объект появляется и никогда не теряется, а функция «onTrackingLost» никогда не срабатывает.Похоже, эта функция не вызывается автоматически и не работает!

Как мы можем решить эту проблему, пожалуйста?!

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете отсоединить объект от цели vuforia - сделав его не дочерним, но вместо этого установить его где-нибудь еще в иерархии - и только переместить его в правильные координаты OnTargetFound.

Добавьте, например, UnityEvent<Transform> подобно (это относится к цели vuforia)

[system.Serializable]
public class TransformEvent : UnityEvent<TargetFoundEventHandler>
{
}

public class TargetFoundEventHandler : DefaultTrackableEventHandler
{
    public TransformEvent onTrackingFound;

    protected override void OnTrackingFound()
    {
        onTrackingFound.Invoke(transform);
    }
}

Вы можете использовать это для ссылки на обратные вызовы (аналогично onClickиз Button s), но эти методы должны ожидать, что параметр TargetFoundEventHandler подобен (это относится к объекту для размещения)

public class PlaceMeOnTarget()
{
    public void PlaceOnTarget(TargetFoundEventHandler target)
    {
        transform.SetPositionAndRotation(target.transform.position, target.transform.rotation);

        // optinally remove the callback so this object
        // will not be placed elsewhere
        target.onTrackingFound.RemoveListener(PlaceOnTarget);
    }
}
...