I have done my research, but i did not get the results that i wanted. I followed the Instructions of this video https://www.youtube.com/watch?v=I9j3MD7gS5Y.
My Code of the ARTrackedImages:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
[RequireComponent(typeof(ARTrackedImageManager))]
public class MultipleImageObjectRecognition : MonoBehaviour
{
[SerializeField]
private GameObject[] placeablePrefabs;
private Dictionary<string, GameObject> spawnedPrefabs = new Dictionary<string, GameObject>();
private ARTrackedImageManager trackedImageManager;
private void Awake()
{
trackedImageManager = FindObjectOfType<ARTrackedImageManager>();
foreach(GameObject prefab in placeablePrefabs)
{
GameObject newPrefab = Instantiate(prefab, Vector3.zero, Quaternion.identity);
newPrefab.name = prefab.name;
spawnedPrefabs.Add(prefab.name, newPrefab);
}
}
private void OnEnable(){
trackedImageManager.trackedImagesChanged +=ImageChanged;
Debug.Log("Added Image");
}
private void OnDisable(){
trackedImageManager.trackedImagesChanged -=ImageChanged;
Debug.Log("Remove Image");
}
private void ImageChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach(ARTrackedImage trackedImage in eventArgs.added)
{
UpdateImage(trackedImage);
Debug.Log("added Image " + trackedImage.name);
}
foreach(ARTrackedImage trackedImage in eventArgs.updated)
{
UpdateImage(trackedImage);
Debug.Log("updated Image " + trackedImage.name);
}
foreach(ARTrackedImage trackedImage in eventArgs.removed)
{
spawnedPrefabs[trackedImage.name].SetActive(false);
Debug.Log("removed Image " + trackedImage.name);
}
}
private void UpdateImage(ARTrackedImage trackedImage)
{
string name = trackedImage.referenceImage.name;
Vector3 position = trackedImage.transform.position;
GameObject prefab = spawnedPrefabs[name];
prefab.transform.position = position;
prefab.SetActive(true);
foreach(GameObject go in spawnedPrefabs.Values)
{
if(go.name != name)
{
go.SetActive(false);
Debug.Log(go.name + " has been removed");
}
}
}
}
The first problem that occured, was that the Images of the Buildings I have taken, did not work with the „arcoreimg“-Tool (not enough Keypoints). So I found some random pictures, which get a Score of 70.
(For the testing: I have 2 Images with a score above 70 and two GameObjects.)
Secondly when the Image gets recognized by the ArApp the GameObject appears, but when i move the recognized Image, the GameObject does not Update properly. It just stays at the first recognized position. Sometimes i can switch between the two pictures and the correct Gameobject appears. But most of the time it does not work properly. And i am using the Lunar Console and it seems like the app ends up in an endless loop Log output:
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
updated Image ARTrackedImage 00000073E674EE80-600613A12A17C812
berlin has been removed
updated Image ARTrackedImage 00000072E1CCDC00-600613A12A17C812
cycle has been removed
Maybe it has something to do with UpdateImage() or is there even a better/more accurate way to image recognition