using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Events; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; public class ImageRecognitionBasic : MonoBehaviour { public string ReferenceImageName; //refer name to the image in the image library, this name should be exactly same as the respective image name in library private ARTrackedImageManager _TrackedImageManager; //reference to the ARTrackedImageManager to manages the tracking images public Dictionary modelPrefabs; private void Awake() //initializes _TrackedImageManager by finding an object ARTrackedImageManager, when the script instance loaded { _TrackedImageManager = FindObjectOfType(); } private void OnEnable() { if (_TrackedImageManager != null) { _TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged; //called whenever there's a change in the tracked images } } private void OnDisable() { if (_TrackedImageManager != null) { _TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged; } } private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs e) { foreach (var trackedImage in e.added) { Debug.Log($"Tracked image detected: {trackedImage.referenceImage.name} with size: {trackedImage.size}"); } UpdateTrackedImages(e.added); UpdateTrackedImages(e.updated); UpdateTrackedImages(e.removed); } private void UpdateTrackedImages(IEnumerable trackedImages) { // If the same image (ReferenceImageName) var trackedImage = trackedImages.FirstOrDefault(x => x.referenceImage.name == ReferenceImageName); if (trackedImage == null) { return; } if (trackedImage.trackingState != TrackingState.None) { var trackedImageTransform = trackedImage.transform; transform.SetPositionAndRotation(trackedImageTransform.position, trackedImageTransform.rotation); this.gameObject.GetComponent().objectWasScanned(); } } }