Heres the code, exactly as it is in the video. using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; //Keep dictionary array of created prefabs private readonly Dictionary _instantiatedPrefabs = new Dictionary(); void Awake() { // Cache a reference to the Tracked Image Manager component _trackedImagesManager = GetComponent(); } void OnEnable() { // Attach event handler when tracked images change _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } void OnDisable() { // Remove event handler _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } // Event Handler private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { // Loop through all new tracked images that have been detected foreach (var trackedImage in eventArgs.updated) { // Get the ame of the referance image var imageName = trackedImage.referenceImage.name; // Now loop over the array of prefabs foreach (var curPrefab in ArPrefabs) { // Check wether this prefab matches the tracked image name, and that // the prefab hasn't already been created if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName)) { // Instantiate the prefab, parenting it to the ARTrackedImage var newPrefab = Instantiate(curPrefab, trackedImage.transform); // Add the created prefab to our array _instantiatedPrefabs[imageName] = newPrefab; } } } // For all prefabs that have been created so far, set them active or no depending // on whether their corresponding image is currectly being tracked foreach (var trackedImage in eventArgs.updated) { _instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(trackedImage.trackingState == TrackingState.Tracking); } // If the AR subsystem has given up looking for a tracked image foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Scripity of the video above is here :] using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; private readonly Dictionary _instantiatedPrefabs = new Dictionary(); // foreach(var trackedImage in eventArgs.added){ // Get the name of the reference image // var imageName = trackedImage.referenceImage.name; // foreach (var curPrefab in ArPrefabs) { // Check whether this prefab matches the tracked image name, and that // the prefab hasn't already been created // if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 // && !_instantiatedPrefabs.ContainsKey(imageName)){ // Instantiate the prefab, parenting it to the ARTrackedImage // var newPrefab = Instantiate(curPrefab, trackedImage.transform); void Awake() { _trackedImagesManager = GetComponent(); } private void OnEnable() { _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } private void OnDisable() { _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (var trackedImage in eventArgs.updated) { // var imageName = trackedImage.referenceImage.name; //foreach (var curPrefab in AreaEffector2DPrefabs) // { // if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 // && !_instantiatedPrefabs.ContainsKey(imageName)) // { // var newPrefab = Instantiate(curPrefab, trackedImage.transform); // _instantiatedPrefabs[imageName] = newPrefab; // } // } // } _instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(trackedImage.trackingState == TrackingState.Tracking); } foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Just curious, why is everything after private readonly Dictionary _instantiatedPrefabs = new Dictionary(); and OnTrackedImagesChanged commented out, whereas its not in the video?
Thank you very much for this tutorial. Unfortunately I got the following error when I build the project on Android: "The application requires last version of Google Play for AR". Everything seems ok. I also tried several devices without success. Any suggestions? Thanks
Great video! Im stuck at this moment... How can I use image tracking in XR Enviroment simulation? Now I get error from line of code "_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(trackedImage.trackingState == TrackingState.Tracking);" in foreach update
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; private readonly Dictionary _instantiatedPrefabs = new Dictionary(); // foreach(var trackedImage in eventArgs.added){ // Get the name of the reference image // var imageName = trackedImage.referenceImage.name; // foreach (var curPrefab in ArPrefabs) { // Check whether this prefab matches the tracked image name, and that // the prefab hasn't already been created // if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 // && !_instantiatedPrefabs.ContainsKey(imageName)){ // Instantiate the prefab, parenting it to the ARTrackedImage // var newPrefab = Instantiate(curPrefab, trackedImage.transform); void Awake() { _trackedImagesManager = GetComponent(); } private void OnEnable() { _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } private void OnDisable() { _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (var trackedImage in eventArgs.updated) { // var imageName = trackedImage.referenceImage.name; //foreach (var curPrefab in AreaEffector2DPrefabs) // { // if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 // && !_instantiatedPrefabs.ContainsKey(imageName)) // { // var newPrefab = Instantiate(curPrefab, trackedImage.transform); // _instantiatedPrefabs[imageName] = newPrefab; // } // } // } _instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(trackedImage.trackingState == TrackingState.Tracking); } foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Unity.Tutorials.Core.Editor.BuildStartedCriterion must be instantiated using the ScriptableObject.CreateInstance method instead of new BuildStartedCriterion. UnityEngine.ScriptableObject:.ctor () Unity.Tutorials.Core.Editor.Criterion:.ctor () Unity.Tutorials.Core.Editor.PreprocessBuildCriterion:.ctor () Unity.Tutorials.Core.Editor.BuildStartedCriterion:.ctor () UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) Unity.Tutorials.Core.Editor.BuildStartedCriterion must be instantiated using the ScriptableObject.CreateInstance method instead of new BuildStartedCriterion. UnityEngine.ScriptableObject:.ctor () Unity.Tutorials.Core.Editor.Criterion:.ctor () Unity.Tutorials.Core.Editor.PreprocessBuildCriterion:.ctor () Unity.Tutorials.Core.Editor.BuildStartedCriterion:.ctor () UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) [ServicesCore]: To use Unity's dashboard services, you need to link your Unity project to a project ID. To do this, go to Project Settings to select your organization, select your project and then link a project ID. You also need to make sure your organization has access to the required products. Visit dashboard.unity3d.com to sign up. UnityEngine.Logger:LogWarning (string,object) Unity.Services.Core.Internal.CoreLogger:LogWarning (object) (at Library/PackageCache/com.unity.services.core@1.5.2/Runtime/Core.Internal/Logging/CoreLogger.cs:15) Unity.Services.Core.Editor.ProjectUnlinkBuildWarning:OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport) (at Library/PackageCache/com.unity.services.core@1.5.2/Editor/Core/Build/ProjectUnlinkBuildWarning.cs:29) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) MissingTextureException: Exception of type 'UnityEditor.XR.ARCore.ArCoreImg+MissingTextureException' was thrown. UnityEditor.XR.ARCore.ArCoreImg.CopyTo (UnityEngine.XR.ARSubsystems.XRReferenceImage referenceImage, System.String destinationDirectory) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ArCoreImg.cs:147) UnityEditor.XR.ARCore.ArCoreImg+d.MoveNext () (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ArCoreImg.cs:156) System.String.Join (System.String separator, System.Collections.Generic.IEnumerable`1[T] values) (at :0) UnityEditor.XR.ARCore.ArCoreImg.ToImgDBEntry (UnityEngine.XR.ARSubsystems.XRReferenceImage referenceImage, System.String destinationDirectory) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ArCoreImg.cs:163) UnityEditor.XR.ARCore.ArCoreImg.ToInputImageListPath (UnityEngine.XR.ARSubsystems.XRReferenceImageLibrary library, System.String destinationDirectory) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ArCoreImg.cs:171) UnityEditor.XR.ARCore.ArCoreImg.BuildDb (UnityEngine.XR.ARSubsystems.XRReferenceImageLibrary library) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ArCoreImg.cs:97) UnityEditor.XR.ARCore.ARCoreImageLibraryBuildProcessor.BuildAssets () (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ARCoreImageLibraryBuildProcessor.cs:37) Rethrow as Exception: - - - Error building XRReferenceImageLibrary Assets/ReferenceImageLibrary.asset: XRReferenceImage named '' is missing a texture. - - - UnityEditor.XR.ARCore.ARCoreImageLibraryBuildProcessor.Rethrow (UnityEngine.XR.ARSubsystems.XRReferenceImageLibrary library, System.String message, System.Exception innerException) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ARCoreImageLibraryBuildProcessor.cs:16) UnityEditor.XR.ARCore.ARCoreImageLibraryBuildProcessor.BuildAssets () (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ARCoreImageLibraryBuildProcessor.cs:41) UnityEditor.XR.ARCore.ARCoreImageLibraryBuildProcessor.UnityEditor.Build.IPreprocessBuildWithReport.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at Library/PackageCache/com.unity.xr.arcore@4.2.7/Editor/ARCoreImageLibraryBuildProcessor.cs:74) UnityEditor.Build.BuildPipelineInterfaces+c__DisplayClass16_0.b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at :0) UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at :0) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&) Error building Player: MissingTextureException: Exception of type 'UnityEditor.XR.ARCore.ArCoreImg+MissingTextureException' was thrown. Build completed with a result of 'Failed' in 0 seconds (429 ms) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002da] in :0 at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in :0 UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; // Keep dictionary array of created prefabs private readonly Dictionary _instantiatedPrefabs = new Dictionary(); void Awake() { // Cache a reference to the tracked image manager component _trackedImagesManager = GetComponent(); } void OnEnable() { // Attach event handler when tracked images change _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } void OnDisable() { //Remove event handler _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } // Event handler private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { // Loop through all new tracked images that have been detected foreach (var trackedImage in eventArgs.added) { // Get the name of the refrence image var imageName = trackedImage.referenceImage.name; // Now loop over the array of prefabs foreach (var curPrefab in ArPrefabs) { // Check whether this prefabs matches the tracked image name, and that // The prefabs hasn't already been created if (string.conpare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName)) { // Instantiate the prefab, parenting it to the ARTrackedImage var newPrefab = instantiate(curPrefab, trackedImage.transform); // Add the created prefab to our array _instantiatedPrefabs[imageName] = newPrefab; } } } // For all prefabs that have been created so far, set them or not depending // on whether their corresponding image is currently being tracked foreach (var trackedimage in eventArgs.updated) { _instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(trackedimage.trackingState == TrackingState.Tracking); } // If the AR subsystem has given up looking for a tracked image foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Can you continue with this series? This is the very first Unity ARFoundation tutorial I have followed that isn't insanely awful. This was great, it worked, its up to date, its logical, and it goes from beginning to end without skipping steps. Signed up for your Patreon.
the right scrip ( from his developer channel) using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; // Keep dictionary array of created prefabs private readonly Dictionary _instantiatedPrefabs = new Dictionary(); void Awake() { // Cache a reference to the Tracked Image Manager component _trackedImagesManager = GetComponent(); } void OnEnable() { // Attach event handler when tracked images change _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } void OnDisable() { // Remove event handler _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } // Event Handler private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { // Loop through all new tracked images that have been detected foreach (var trackedImage in eventArgs.added) { // Get the name of the reference image var imageName = trackedImage.referenceImage.name; // Now loop over the array of prefabs foreach (var curPrefab in ArPrefabs) { // Check whether this prefab matches the tracked image name, and that // the prefab hasn't already been created if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName)) { // Instantiate the prefab, parenting it to the ARTrackedImage var newPrefab = Instantiate(curPrefab, trackedImage.transform); // Add the created prefab to our array _instantiatedPrefabs[imageName] = newPrefab; } } } // For all prefabs that have been created so far, set them active or not depending // on whether their corresponding image is currently being tracked foreach (var trackedImage in eventArgs.updated) { _instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(trackedImage.trackingState == TrackingState.Tracking); } // If the AR subsystem has given up looking for a tracked image foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Hi, I've built the app on my phone but no matter what i do it doesnt seem to be placing any objects at all. As far as i can tell i've done everything as per the video but when i open the app the camera opens but it either doesnt detect or doesnt place objects(Which one i cant tell) Are there any steps i can take to debug this?
Sorry for necroposting. Did you get it to work? At first I thought it wasn't working but then I noticed the tip of a gray cube in the corner of the screen. Then after some moving around the image I managed to get the cube to come to the screen but it's still kinda floaty and not centered.
Hello Playful Technology Great dowen to earth video, perfekt tempo. I made the app and it runs perfectly, the camera it's starting normally on the app at my mobile device (Samsung s21), but when I point it to the anchor image, nothing happends, the 3D object does not appear above it. Can you help me/us
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; // Keep dicationary array of created prefabs private readonly Dictionary _instantiatedPrefabs = new Dictionary(); void Awake() { _trackedImagesManager = GetComponent(); } private void OnEnable() { _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } private void OnDisable() { _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { // Loop through all the new tracked images that have been detected foreach (var trackedImage in eventArgs.added) { // Get the name of the reference image var imageName = trackedImage.referenceImage.name; // Now loop over the array of prefabs foreach (var curPrefab in ArPrefabs) { // Check whether this prefab matches the tracked image name, and that // the prefab hasn't already been created if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName)) { // Instantiate the prefab, parenting it to the ARTrackedImage var newPrefab = Instantiate(curPrefab, trackedImage.transform); // Add the created prefab to our array _instantiatedPrefabs[imageName] = newPrefab; } } } // For all prefabs that have been created so far, set them active or not depending // on whether their corresponding image is currently being tracked foreach (var trackedImage in eventArgs.updated) { _instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(trackedImage.trackingState == TrackingState.Tracking); } // If the AR Subsystem has given up looking for a tracked image foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive _instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false); } } }
Hi can any one assist me. When I done with coding I am receiving error in Script component in Unity as " Associate Script cannot be loaded. Please fix any compile errors and assign a value to script". But there is not error showing in Visual studio
sorry when i copy and paste the cs script. it keeps saying "associated script can not be loaded, please fix any compile errors and assign a valid script". help please. update: fixed issue. the script name has to be spelt the exact same on the cs code
Everything built successfully but when I open the AR app it’s having a hard time recognizing the image marker, the cube object just randomly appears and disappears does anyone know how to fix this?
@@user-el5jg3wo9b I saw someone else with same issue in comments and again I know it's a bit late but I've had this issue and managed to resolve it by simply changing 0 to 1 in the AR Tracked Image Manager component that is attached to the AR Session Origin.
For those having an issue with the script compiling, try making sure the class name in the CS file is the same exact name as the CS file, casing and all.
.cs on the name to??, it didn't let me add it, got an error saying,"The associated script can not be loaded. Please fix any compile error and assign a valid script"
@@bruhbeat3047 no, don't include the ".cs" part in the script class name. Just put the name that's in front. If you still have an error, then it's probably a different syntax error so go through the code again and see if you have anything missing or in a wrong format.
@@user-rj1hx3gw2b if you open the description of the video you'll see the link to his paterion, hit that and scroll down to the thumb nail of this video it's linked there, Btw I've just been helping people in the comments just look around and you should be able to find other people's that I helped with 👍
It baffles me as to how this channel is the only one with good and easy to understand Unity Augmented Reality tutorials. I remember watching your Vuforia tutorial about 3-4 years ago. Great stuff!
Hi, everyone. I have an issue. I made the app and it runs perfectly, the camera it's starting normally on the app at my mobile device, but when I point it to the anchor image, nothing happends, the cube does not appear above it. Does anyone knows how I fix that, pls?
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class PlaceTrackedImages : MonoBehaviour { // Reference to AR tracked image manager component private ARTrackedImageManager _trackedImagesManager; // List of prefabs to instantiate - these should be named the same // as their corresponding 2D images in the reference image library public GameObject[] ArPrefabs; private readonly Dictionary _instantiatedPrefabs = new Dictionary(); void Awake() { // Cache a reference to the Tracked Image Manager component _trackedImagesManager = GetComponent(); } void OnEnable() { // Attach event handler when tracked images change _trackedImagesManager.trackedImagesChanged += OnTrackedImagesChanged; } private void OnDisable() { // Remove event handler _trackedImagesManager.trackedImagesChanged -= OnTrackedImagesChanged; } // Event Handler private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) { // Loop through all new tracked images that have been detected foreach (var trackedImage in eventArgs.added) { // Get the name of the reference image var imageName = trackedImage.referenceImage.name; // Now loop over the array of prefabs foreach (var curPrefab in ArPrefabs) { //AreaEffector2DPrefabs // Check whether this prefab matches the tracked image name, and that // the prefab hasn't already been created if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName)) { // Instantiate the prefab, parenting it to the ARTrackedImage var newPrefab = Instantiate(curPrefab, trackedImage.transform); // Add the created prefab to our array _instantiatedPrefabs[imageName] = newPrefab; } } } // For all prefabs that have been created so far, set them active or not depending // on whether their corresponding image is currently being tracked foreach (var trackedImage in eventArgs.updated) { _instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(trackedImage.trackingState == TrackingState.Tracking); } // If the AR subsystem has given up looking for a tracked image foreach (var trackedImage in eventArgs.removed) { // Destroy its prefab Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]); // Also remove the instance from our array _instantiatedPrefabs.Remove(trackedImage.referenceImage.name); // Or, simply set the prefab instance to inactive //_instantiatedPrefabs[trackedImage.referenceImage.name] .SetActive(false) ; } } }
I need some help. I was able to build & run the app, but when I point the camera at the reference, my object doesn't show up. The reference I'm using is an 8x8 grid of black & white squares which should be pretty easy to recognize, and is about 180 x 180mm for the entire grid, so decently large. I'm using a Samsung Galaxy S8.
Hi, thank you to share this amazing video. I have the black screen when i run the app on my smartphone (Galaxy S8 - Android V.9). I do not why the camera not working. Unity Editor version used: 2021.3.7f1
Any changes to the AR Tool landscape since this video was made? For example, Flutter , ARLoopa, or Flet/ARCore ? I'd like to make an Android application that can find components from a circuit board! Just use your camera and it will overlay a marker on the component... however, not sure if there is a minimum marker size , and if it can be overlayed with such high precision. For example, if you have a sheet of paper with a grid of squares, say 50x50.. if A4 is said/entered, could AR use a fiducial on the paper to calculate how far into the grid it needs to place a marker (scaling it based on the the angle and how close the camera is to the sheet).
Hi Sir, I am very new to SDK and AR. I am confused about determining the SDK, which device is suitable for it. I always encounter errors when I want to build an application. I hope you make a tutorial about SDK and Unity 2017 because this version is the best in my opinion and the beginning of AR being implemented in unity.
I watched many AR tutorial on RU-vid, but most of them were outdated or hard to understand. Thanks for this detailed Unity AR tutorial. I have just liked and subscribed to your channel. Would you please create a tutorial on how to rotate and scale different objects after instantiating the 3D models in the AR scene? Cheers!
given how fast everything changes.... i would like to ask , is the most of the information still relevant ? I'm sure the process might have stayed somewhat same, but unity could have changed, plugins, detection algoriddims .. etc etc .... so not questioning the validity of the advice provided , just wondering on how rather applicable it is - given the tools are up to date.
i am beginner to everything and i made it all the way to end of the video. i am having troubles on how to run it in the device and also the saved apk is not showing up on my pc. Instead when I search, it says file not found/cant open.
Here is the code. I got it from a forum. Turns out it doesn't work with android under version 7, and my phone is version 6. drive.google.com/file/d/1N6Txdtq8pCGTEndZImSdNOowvY4nBAs1/view?usp=sharing
Hi, Nice video, Can you demonstrate a case where the augmented reality game uses objectron object detection to sense the direction of the object with respect to the movement of the object. A usecase can be there is a car toy and based on the objectron users can see certain effects like turbo and smoke based on the object velocity at the correct position i.e. at the rear always.
La solución para quienes no les arroja error y aun así el cubo no se ve, desde el min 9:22 en la parte super, donde sale la versión de Unity 2022.1.51f, esta cambia a Unity 2021.3.4f1. Hice el cambio de versión con los mismos pasos y logre ver el cubo en el marker. _ The solution for those who do not get an error and even so the cube cannot be seen, from min 9:22 in the super part, where the version of Unity 2022.1.51f comes out, it changes to Unity 2021.3.4f1. I did the version change with the same steps and I managed to see the cube in the marker.
Thanks for the excellent tutorial! Like many others, I use iOS and have had the black screen and Unity crashing issues. Some people suggest that it's resolvable with activating and updating the ARKit /ARCore. Mine were already in place and updated, and it wasn't until I downloaded and imported the entire Unity AR Foundation package that I was able to do image tracking and have the camera work. They have samples built in to the Foundation package. There are a lot more scripts!
I wanna ask for the tracking of the images, is there any limitation where by the colour must match? lets say the image library we gave a colour image but we track a monochrome image. Does it work?
Love your videos but to be honest this one is a little too technical as i am not a coder and want to create an AR app for my college Treasure hunt the one which you released a few years ago i could follow that and create a simple AR app this one is way more confusing and technical
I had an issue with the Android phone not putting the 3D image over the anchor. Not sure what helped exactly. But potentially it might have been due to the size of the cube being too large to fit within the screen area. It was 1m3 and worked after I adjusted to be 0.1m3. Hope that helps someone else
Very useful video and comments. I built the app -- works all the way, except when I point iphoneX on the card, the cube does appear but for a nano second and then disappears -- it does not stay. The app keeps trying to bring the cube, but cube never sticks. Any idea what I may be missing?
There appears to be an issue with ARTrackedImagesChangedEventArgs updated in ARKit. If you just remove the code for the foreach loop that covers eventArgs.updated then it should work fine.
this is amazing, great tutorial. but what if I dont want to depend on a single device? what if I want to make it web based? working for android and IOS?
I have followed this tutorial closely but I just get a black screen when I run it (clicking play at the top of the unity). Does anyone have any ideas of what the issue could be? I get this error in the consol "No active UnityEngine.XR.ARSubsystems.XRImageTrackingSubsystem is available. Please ensure that a valid loader configuration exists in the XR project settings." But I don't undersand because I have selected ar core on my within the xr plugin management tab. When I try to upload to my phone nothing seems to happen either? Any adivice would be very appreciated.
You will have go to "Window Option" then go to "package Manager" and click on the option "XR management" n there click on this Window icon and tick "ARCORE" there....
THIS IS TOTALLY AMAZING. Ive always wanted to start studying AR and this was the perfect jumping off point. One question i had was where could we find the script put into visual studio at the 16 min mark?
dear boss, when I follow your guide, when in "install" step, I install the "Unity 2022.3.2f1", but there are only 3 topic under that: they are "editor application""documentation""webgl build support"... there is no "android" or "ios build" option... strange...
Im just a regular language teacher trying to help my students who have difficulties in basic reading and writing. I have no basic in programming. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-xrxyHxXFzXM.html This card i tried using free version of online site. But its limited since it is free version. Im trying to learn on creating AR Phonics Card to help my students. How can i adjust the Video on the Card so that the video will only play on top of the students image only like my video in the link, by using Unity 2022?
I have the same issue. The app runs perfectly, the camera opens, but when I point it to the anchor, nothing happens. Have u guys found a solution? I would be glad to know.
@@bruhbeat3047 I did. I followed the tutorial and it worked. The app was downloaded, the camera opened, but when I point the camera to the image that it's supposed to be replaced, nothing happends.
Hey, I followed the tutorial closely, but when I run the app on my phone, I only see a black screen. Searching around, the common advice for this is enabling ARCore in XR Plug-in Management but I have already done that. Any suggestions for what the problem may be?
Works well until I get like half a meter (1.6ft) away from the image with my camera, in other words, the image has to take up at least like 20% of my camera video feed to work correctly. As soon as I "zoom out" the tracking is lost. Tested it with different markers and different light setups but that doesn't seem to be the issue. Is there a way to fix this? Perhaps a fundamental setting I'm missing? I've set the tracked images physicla size in my ReferenceImageLibrary asset but that did seemingly nothing.
My model appears and disappears but it looks to be connected to the phone not the image. Tried to update the packages, changing the API level. Any suggestions?
Hello friends, I am making an application with augmented reality in unity. When I build my application for windows, the pc min camera does not turn on, how can I solve it? can you help me?
The update event OnTrackedImagesChanged causes the placed prefab constantly Activate/deactivate because my prefab obscures the tracked image. How do i fix this?
Hi everyone! Thank you so much for this tutorial, was super awesome! When I went to build this on my iPhone I got a build error stating "Undefined symbol: _UnityARKit_Camera_GetTextureReleaseCallbackHandle" Any thoughts on how to fix this? Thanks in advance anyone!
Ok, found it. I manually updated AR Foundation to 4.2.7 (had to unlock it) and then it finally compiled without this error! On iOS please also see this great comment below in case the image is only replaced for a blink of an eye: gardendesignerapp: There appears to be an issue with ARTrackedImagesChangedEventArgs updated in ARKit. If you just remove the code for the foreach loop that covers eventArgs.updated then it should work fine.
@@pretzelmunster Nice thanks for the tip. But I cant even get this project to build now. I go to build settings, then build and it just trys to build for a sec and stops. I opened up another AR unity project and just built it straight away and it worked so I'm guessing its something in the scripts or other build settings thats blocking it. I dont know :(
Hi! I am getting the following error when i try to edit the custom script. "The document PlaceTrackedImages.cs could not be opened. You dont have permission." How do i reslove this?
Hey it's an amazing tutorial but is it necessary to build and run? Can't I copy the APK to my phone and install it? Actually doing so is causing the app to crash on launch
it wont work, for some reason it only works with the first object and image, I'm loosing my mind trying to make a simple ball appear, the cube is perfect but I cant get the ball to appear for my life
I have a question about when you deploy the project. How to give it to end users? Because ok you can do a showcase with your phone, but after that ? The only way is to install the .apk on their (rooted/debug/dev mode active/jailbreak) devices ? :S (nobody know how or agreed to) Or there is another friendly way ? like "click this link and download this friendly project" or maybe something like apkpure etc... and what about apple :s ? ?
Sir I learn how to creat an ar app from you now iam developing it I need to know how to connect unity Android app connect to the Arduino hc05 bluetooth to control the game so please 🥺 make a tutorial on that please