ImageRecognitionBasic.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEngine;
  4. using UnityEngine.Events;
  5. using UnityEngine.XR.ARFoundation;
  6. using UnityEngine.XR.ARSubsystems;
  7. public class ImageRecognitionBasic : MonoBehaviour
  8. {
  9. 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
  10. private ARTrackedImageManager _TrackedImageManager; //reference to the ARTrackedImageManager to manages the tracking images
  11. public Dictionary<string, GameObject> modelPrefabs;
  12. private void Awake() //initializes _TrackedImageManager by finding an object ARTrackedImageManager, when the script instance loaded
  13. {
  14. _TrackedImageManager = FindObjectOfType<ARTrackedImageManager>();
  15. }
  16. private void OnEnable()
  17. {
  18. if (_TrackedImageManager != null)
  19. {
  20. _TrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged; //called whenever there's a change in the tracked images
  21. }
  22. }
  23. private void OnDisable()
  24. {
  25. if (_TrackedImageManager != null)
  26. {
  27. _TrackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
  28. }
  29. }
  30. private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs e)
  31. {
  32. foreach (var trackedImage in e.added)
  33. {
  34. Debug.Log($"Tracked image detected: {trackedImage.referenceImage.name} with size: {trackedImage.size}");
  35. }
  36. UpdateTrackedImages(e.added);
  37. UpdateTrackedImages(e.updated);
  38. UpdateTrackedImages(e.removed);
  39. }
  40. private void UpdateTrackedImages(IEnumerable<ARTrackedImage> trackedImages)
  41. {
  42. // If the same image (ReferenceImageName)
  43. var trackedImage =
  44. trackedImages.FirstOrDefault(x => x.referenceImage.name == ReferenceImageName);
  45. if (trackedImage == null)
  46. {
  47. return;
  48. }
  49. if (trackedImage.trackingState != TrackingState.None)
  50. {
  51. var trackedImageTransform = trackedImage.transform;
  52. transform.SetPositionAndRotation(trackedImageTransform.position, trackedImageTransform.rotation);
  53. this.gameObject.GetComponent<ObjectDropper>().objectWasScanned();
  54. }
  55. }
  56. }