Включить отслеживание не работает для более чем одного целевого изображения облака в vuforia 7.5.20 - PullRequest
0 голосов
/ 17 октября 2018

Обновление

Я проверил с другой версией Unity, она работает с Unity 2018.2.6f1 Personal, которая установлена ​​на другом ноутбуке.Но у меня Unity 2018.2.12f1 Personal, который выдает ошибку.Это ошибка единства?


Я использую базовый бесплатный план vuforia и работаю с распознаванием облаков с помощью vuforia.Часть распознавания облаков работает нормально, а отслеживаемый обработчик выводит имя распознаваемого облака.Но когда я пытаюсь включить отслеживание для привязанного целевого изображения, оно работает только для самого первого изображения.После первого выдается следующая ошибка:

TargetSearchResult cloud-image-name не удалось включить для отслеживания.UnityEngine.Debug: LogError (Object) Vuforia.TargetFinder: EnableTracking (TargetSearchResult, GameObject) CloudRec: OnNewSearchResult (TargetSearchResult) (в активах / сценариях / CloudRec.cs: 66) Vuforia.Ob3

*

Приведенная выше ошибка указывает на следующую строку как проблему:

m_ObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
ImageTargetBehaviour imageTargetBehaviour = (ImageTargetBehaviour)m_ObjectTracker.TargetFinder.EnableTracking(targetSearchResult, ImageTargetTemplate.gameObject);

Техническая версия:

Версия Vuforia: 7.5.20 | Unity 2018.2.12f1 Personal

Полный код здесь:

public class CloudRec : MonoBehaviour, ICloudRecoEventHandler
{

  private CloudRecoBehaviour mCloudRecoBehaviour;
  private bool mIsScanning = false;
  private string mTargetMetadata = "";
  public ImageTargetBehaviour ImageTargetTemplate;
  ObjectTracker m_ObjectTracker;
  TargetFinder m_TargetFinder;


  // Use this for initialization
  void Start()
  {
      // register this event handler at the cloud reco behaviour
      mCloudRecoBehaviour = GetComponent<CloudRecoBehaviour>();
      if (mCloudRecoBehaviour)
      {
          mCloudRecoBehaviour.RegisterEventHandler(this);
      }
  }

  public void OnInitialized()
  {
      m_ObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
      Debug.Log("Cloud Reco initialized");
  }
  public void OnInitError(TargetFinder.InitState initError)
  {
    Debug.Log("Cloud Reco init error " + initError.ToString());
  }
  public void OnUpdateError(TargetFinder.UpdateState updateError)
  {
      Debug.Log("Cloud Reco update error " + updateError.ToString());
  }

  public void OnStateChanged(bool scanning)
  {
      mIsScanning = scanning;
      if (scanning)
      {
        // clear all known trackables
          ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
          tracker.TargetFinder.ClearTrackables(false);
      }
  }

  // Here we handle a cloud target recognition event
  public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
  {
      GameObject newImageTarget = Instantiate(ImageTargetTemplate.gameObject) as GameObject;
      GameObject augmentation = null;

      if (augmentation != null)
          augmentation.transform.SetParent(newImageTarget.transform);
      if (ImageTargetTemplate)
      {
          m_ObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
          ImageTargetBehaviour imageTargetBehaviour = (ImageTargetBehaviour)m_ObjectTracker.TargetFinder.EnableTracking(targetSearchResult, ImageTargetTemplate.gameObject);


          //ImageTracker imageTracker = TrackerManager.Instance.GetTracker<ImageTracker>();
          //ImageTargetBehaviour imageTargetBehaviour = (ImageTargetBehaviour)imageTracker.TargetFinder.EnableTracking(targetSearchResult, newImageTarget);

      }
      if (mIsScanning)
      {
          mCloudRecoBehaviour.CloudRecoEnabled = true;
      }

  }

  // Update is called once per frame
  void Update()
  {

  }

  public void OnInitialized(TargetFinder targetFinder)
  {
      m_ObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
      m_TargetFinder = targetFinder;
  }
}

1 Ответ

0 голосов
/ 19 октября 2018

После почти недели поиска я получил причину ошибки.При запуске с Unity возникает ошибка, но при сборке на Android или iOS все работает нормально.Так что мои сомнения по поводу кода остались, и я заставляю думать нестандартно.Я решил протестировать разные версии единства и вуфории с одной и той же машиной.Это не поможет избежать ошибки.Наконец, я проверил с другими машинами, и я получил причину ошибки.Который из-за аппаратной совместимости.

В моем случае я использую mac pro-2009 mid , который не поддерживает ObjectTracking Но я тестировал с тем же кодом и теми же версиями технологии на MacBook Air2017 и Mac Pro середина 2014 года работает нормально.Итак, я заключаю это как проблему совместимости оборудования!

...