Включить отслеживание не работает для более чем одного целевого изображения облака в vuforia 7.5.20
Обновить
Я проверил с другой версией 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.OhaveRecoBeekReco
Выше ошибка указывает на следующую строку в качестве проблемы:
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 ответ
После почти недели поиска я получил причину ошибки. При запуске с Unity возникает ошибка, но при сборке на Android или iOS она работает нормально. Так что мои сомнения по поводу кода уходят, и я вынужден думать нестандартно. Я решил протестировать различные версии единства и вуфории с одной и той же машиной. Это не поможет избежать ошибки. Наконец, я проверил с другими машинами, и я получил причину ошибки. Который из-за аппаратной совместимости.
В моем случае я использую Mac Pro-2009, который не поддерживает ObjectTracking
Но я тестирую с тем же кодом и теми же версиями технической MacBook Air 2017 и Mac Pro середины 2014 года он работает нормально. Таким образом, я заключаю это как проблему совместимости оборудования!