Augmented Reality (AR) tutorial for beginners using Unity 2022

Поделиться
HTML-код
  • Опубликовано: 26 окт 2024

Комментарии • 584

  • @loadcartoons
    @loadcartoons Год назад +48

    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);
    }
    }
    }

  • @aron_hoffman1521
    @aron_hoffman1521 2 года назад +263

    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);
    }
    }
    }

    • @bceg3961
      @bceg3961 2 года назад +5

      Ty!

    • @madcowboy5700
      @madcowboy5700 Год назад +5

      legend

    • @phananhvu1930
      @phananhvu1930 Год назад +3

      legend

    • @leifdavisson6409
      @leifdavisson6409 Год назад +4

      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&)

    • @abhijiths7907
      @abhijiths7907 Год назад

      Thankyou my man

  • @luketechco
    @luketechco 2 года назад +153

    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.

    • @scar3-ie237
      @scar3-ie237 2 года назад +1

      I wish he would continue too !

    • @feitingschatten1
      @feitingschatten1 Год назад +4

      Most of what you'd do isn't specific to AR. Physics triggers, scenes, raycasts, all basic Unity stuff.

    • @Tropicaya
      @Tropicaya Год назад

      @@feitingschatten1 exactamundo

    • @timeforrice
      @timeforrice 9 месяцев назад

      Would love to see more of this as well.

  • @manofculture8666
    @manofculture8666 2 года назад +8

    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!

  • @alguembonitinho
    @alguembonitinho Год назад +52

    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);
    }
    }
    }

    • @DindaArt
      @DindaArt Год назад +1

      Thanks! I couldn’t find it anywhere! I was feeling scammed haha

    • @eproyectos7730
      @eproyectos7730 Год назад

      Thanks!

    • @NotFlan
      @NotFlan Год назад +3

      Just curious, why is everything after
      private readonly Dictionary _instantiatedPrefabs = new Dictionary();
      and
      OnTrackedImagesChanged
      commented out, whereas its not in the video?

    • @anastasiaporunova7440
      @anastasiaporunova7440 Год назад

      @@DindaArt is this script working?

    • @esmeemarch612
      @esmeemarch612 Год назад

      I love you. Thanks!

  • @IlanPerez
    @IlanPerez 7 месяцев назад +2

    after watch the first 2 minutes of this video I am so excited to dig in.

  • @annexgroup6878
    @annexgroup6878 2 года назад +10

    This is so amazing. I can't thank you enough for providing an updated tutorial. I was getting so frustrated with my projects. Good luck to everyone!

    • @junjun3987
      @junjun3987 Год назад

      have you got it?

    • @ab_obada5012
      @ab_obada5012 Год назад +1

      @@junjun3987 he does not because it is dumb to copy code without to write it and explain it at same time

  • @MM-ye7og
    @MM-ye7og 2 года назад +2

    honestly the best soft tutorial ive ever seen. short and straight to the point ! i love it

  • @jodexcreates
    @jodexcreates 2 года назад +9

    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.

    • @bruhbeat3047
      @bruhbeat3047 2 года назад

      .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"

    • @jodexcreates
      @jodexcreates 2 года назад

      @@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
      @user-rj1hx3gw2b 2 года назад

      how I can get the script file please

    • @bruhbeat3047
      @bruhbeat3047 2 года назад +2

      @@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 👍

    • @lste1868
      @lste1868 Год назад +2

      king

  • @trexnfabianndenis
    @trexnfabianndenis Год назад +1

    I started out with an escape room and now i'm back in school studying electronics-IT.. All thanks to your videos my friend 🙏

    • @PlayfulTechnology
      @PlayfulTechnology  11 месяцев назад

      Oh wow - that's so awesome to hear!

    • @opafritzsche
      @opafritzsche 22 дня назад

      @@PlayfulTechnology any way to do this for PC apps and non mobile Platforms ?

  • @a.kandemir4342
    @a.kandemir4342 2 года назад +1

    With your videos my learning curve will shrink drastically. Thank you.

  • @vladislav4797
    @vladislav4797 2 года назад

    Thank you for the tutorial. Glad to see that AR stack has progressed over time to be finally friendly.

  • @davefrancis4970
    @davefrancis4970 4 месяца назад +1

    That's a fantastic explanation and thanks very much !

  • @lanniekin
    @lanniekin Год назад +6

    Thank you so much for this tutorial! I had struggled through 5 other ones that were either out of date or broken in some way. This was so simple and friendly for an absolute Unity noob :) I'm going to use it to make AR christmas cards this year!

  • @allaboutpaw9396
    @allaboutpaw9396 Год назад

    honestly I work with unity for a few years now as a hobby. I never touched AR and I enjoyed your video a lot. Fully understandable. Continue this great job.

  • @carmelchurchsatchiyapuram2292
    @carmelchurchsatchiyapuram2292 2 года назад +1

    The most structured and detailed tutorial i ca across until now. Thank you very much!

  • @pascalmariany
    @pascalmariany 2 года назад +1

    This is awesome 👏🏼 As a XR teacher I will let my students make an AR gallery. Nice addition! As I planned to let them make a VR gallery already. Thanks a lot! I’ll support you.

  • @jamesmethven
    @jamesmethven Год назад +1

    Fantastic! Your explanation for the C# segment is clear and surprisingly simple - thanks!

  • @loreleipepi3389
    @loreleipepi3389 Год назад +2

    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!

  • @hariswidianto2416
    @hariswidianto2416 2 года назад +1

    BROTHER, YOU ARE THE BEST!!! You oooh really helped me!! THANK YOU VERY MUCH!

  • @henryqng
    @henryqng 2 года назад +4

    I watched many AR tutorial on RUclips, 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!

  • @annexgroup6878
    @annexgroup6878 2 года назад

    I am SO happy you made this video. I've been hitting so many roadblocks lately

  • @sairapabraham4251
    @sairapabraham4251 2 года назад +13

    where can I get the C#script for place tracked image ?

    • @fin4314
      @fin4314 2 года назад +1

      Go to the Patreon of the channel - you can find the code there even if you're not a supporter

  • @joaoprata4065
    @joaoprata4065 8 месяцев назад

    Finally what i've been serching for so long. Subscribed! Is there a way to publish your AR experiences so that you can share on social media?

  • @inboxdesignstudio6354
    @inboxdesignstudio6354 2 года назад

    Tgank you so much for Uploading this, was waiting from so many days for your upload. Thanks

  • @dineipinheiro4990
    @dineipinheiro4990 2 года назад

    TNice tutorials is just the pick up I needed, thanks man

  • @benbehar7397
    @benbehar7397 Год назад +6

    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);
    }
    }
    }

  • @saviourmbong3738
    @saviourmbong3738 2 года назад

    I am glad that there are people like you, who can help beginner streamers. Thank you brother, I appreciate your support. Always fresh updates

  • @jmjb67
    @jmjb67 2 года назад +1

    Really great instructional video. It is up-to-date (Oct 2022), thorough, comprehensive, well-paced and concise.
    (and look, Ma: no vuforia!) :)

  • @allenwazny4355
    @allenwazny4355 2 года назад

    Thanks Alastair! This is brilliant. I will update as soon as I created my "AR Card Trick"!

  • @zidhart4286
    @zidhart4286 2 года назад

    TNice tutorials is aweso! I was feeling kinda overwheld when i first start soft but after watcNice tutorialng your tutorial video, i feel much more confident

  • @leonardusdandy.7468
    @leonardusdandy.7468 2 года назад

    You got a like, a subscriber and a buzzer on from an old guy. TNice tutorials is the best soft soft tutorial I've seen so far. You covered a lot of

  • @carlosmorais6870
    @carlosmorais6870 2 года назад

    I could listen to Nice tutorialm talk for hours man what a passionate dude ❤️

  • @senatorfabor8071
    @senatorfabor8071 2 года назад

    I’ve watched hours of videos and tNice tutorials one is the first that explains it in a way a complete beginner could understand! Great video

  • @stuffwithjuice2111
    @stuffwithjuice2111 2 года назад

    I've seen that has actually explained it to in a concise way!

  • @ranchen1534
    @ranchen1534 Год назад

    This is a demo that actually works!! Great for beginners like me.

  • @all-realities
    @all-realities Год назад

    Thank you Alastair, that was immensely helpful to get a start with an AR app!

  • @Kenji_195
    @Kenji_195 2 года назад

    I loved that code, smart, fancy and easy to read/understand

  • @phillipotey9736
    @phillipotey9736 Год назад

    Bro rockin' the Nigel thornberry look, loved the tutorial.

  • @gabriel98ts69
    @gabriel98ts69 2 года назад

    I am very glad that I stumbled upon your video

  • @indriyanipuspita3575
    @indriyanipuspita3575 2 года назад

    BROOO THANK YOU!!!!!!!!!!!!!!!!! YOU'R THE BEST!!!!!! I LEARNED EVERYTNice tutorialNG I NEEDED TO KNOW THAN YOU VERY

  • @henrikjorgensen6850
    @henrikjorgensen6850 2 года назад +7

    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

    • @thiago_vball
      @thiago_vball Год назад

      same

    • @ED-nj9uo
      @ED-nj9uo Год назад

      ave you found a solution by any chance?
      The same thing happens to me

  • @abdoudzabdoudz420
    @abdoudzabdoudz420 2 года назад

    man I missed this kind of tutorials lol. Great work here, thanks!!!

  • @AbhirajGulati
    @AbhirajGulati Год назад +6

    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?

    • @ericowususarpong3063
      @ericowususarpong3063 Год назад

      I am having the same issue, any resolution??

    • @elverrepolska
      @elverrepolska Год назад

      I've got the same issue. I do everything step by step, but camera not detect my reference image :( Samsung S21

    • @shanonfrancis5071
      @shanonfrancis5071 2 месяца назад

      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.

  • @rubangga4694
    @rubangga4694 2 года назад

    I really enjoy your channel and you are a good teacher. I might have missed sotNice tutorialng and I don't get friends with the setuper. I worked

  • @taniasalla
    @taniasalla 2 года назад

    You saved my life, THANK YOU!!!

  • @rgx-gaylord9226
    @rgx-gaylord9226 2 года назад

    THANKS FOR THIS IV BEEN SEARCHING FO SOOO LONG

  • @Clicks_And_Flicks
    @Clicks_And_Flicks 8 месяцев назад +5

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.XR.ARFoundation;
    using UnityEngine.XR.ARSubsystems;
    [RequireComponent(typeof(ARTrackedImageManager))]
    public class PlacedTrackedImages : MonoBehaviour
    {
    private ARTrackedImageManager _trackedImagesManager;
    public GameObject[] ArPrefabs;
    private readonly Dictionary _instantiatedprefabs = new Dictionary();
    private 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.added)
    {
    var imageName = trackedImage.referenceImage.name;
    foreach (var curPrefab in ArPrefabs)
    {
    if (string.Compare(curPrefab.name, imageName, StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedprefabs.ContainsKey(imageName))
    {
    var newPrefab = Instantiate(curPrefab, trackedImage.transform);
    _instantiatedprefabs[imageName] = newPrefab;
    }
    }
    }
    foreach (var trackedImage in eventArgs.updated)
    {
    _instantiatedprefabs[trackedImage.referenceImage.name]
    .SetActive(trackedImage.trackingState == TrackingState.Tracking);
    }
    foreach (var trackedImage in eventArgs.removed)
    {
    Destroy(_instantiatedprefabs[trackedImage.referenceImage.name]);
    _instantiatedprefabs.Remove(trackedImage.referenceImage.name);
    }
    }
    }

  • @1larrydom1
    @1larrydom1 2 года назад

    Very good as usual. Not something I'm interested in, but I enjoy the way you go in depth on topics, which is why I subscribe.
    I hope you have more things like the big digit timer and Arduino/pi items. Love those. I'm sure you will. Cheers!

  • @Jordansj-lf8dc
    @Jordansj-lf8dc 2 года назад +4

    where can i get the code??? Thanks for the the great tutorial for my first experience approaching in AR.

    • @henrikjorgensen6850
      @henrikjorgensen6850 2 года назад

      gist.github.com/alastaira/92d790ed09330ea7a45e7c3a2a4d26e1#file-placetrackedimages-cs

  • @kimnana6652
    @kimnana6652 2 года назад

    Yo this helped so much and I always appreciate the content and when i found the channel and got the energy from you from the previous video, you've been nothing but real and can vouch for the amazing content and how down to earth you are with everything! All the most love, respect, and appreciation

  • @elisabologni7481
    @elisabologni7481 Год назад +2

    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

  • @manojdaniels
    @manojdaniels Год назад

    Awesome Description Brother. May God Bless you !!

  • @dettykurniawati2068
    @dettykurniawati2068 2 года назад

    that was a nice video it definitely helped out, thankyou so much and you just earned a sub

  • @SoumikPradhan
    @SoumikPradhan 2 года назад

    Very helpful to get quick hands on. Thanks for sharing :)

  • @mairem
    @mairem Год назад +1

    why does the unity version switch halfway through? many things are not compatible in the 2022 version and that's not mentioned

  • @zachheaven
    @zachheaven 2 года назад +3

    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?

    • @zachheaven
      @zachheaven 2 года назад

      found it. theres a link to the description at the end which leads you to github. scroll down on that and youll find it

    • @pedrodavid2599
      @pedrodavid2599 2 года назад

      @@zachheaven do u still got it? I couldn't find it

    • @theharmont7390
      @theharmont7390 2 года назад

      @@pedrodavid2599youtube does not allow you to send links :(

    • @kinga.b.1709
      @kinga.b.1709 2 года назад

      ​@@theharmont7390 , Hello! Could you add this link to the description of your latest video on your channel?

    • @hellhxxoundss1930
      @hellhxxoundss1930 11 месяцев назад

      im making this for a project .. can u please send the link via any social media site .. i reall need that line of code .. thanks@@theharmont7390

  • @Smokinz
    @Smokinz 2 года назад

    Thanks dude...It helps alot especially on beginners like

  • @optimus6858
    @optimus6858 Год назад +2

    thanks
    but my apk installs normally on android pie
    when i open it , it closes instantly

  • @jacqui6954
    @jacqui6954 2 года назад

    I love your channel❤. Please continue making videos. I have a very good feeling that you will succeed

  • @Moki314
    @Moki314 Год назад +3

    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.

  • @webdevelopment8723
    @webdevelopment8723 2 года назад

    it worked! thank you so much!!

  • @sivamurugan9132
    @sivamurugan9132 2 года назад +3

    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

    • @jjaylee6095
      @jjaylee6095 Год назад

      I have the same problem, did you solve it

  • @fishhuynh3390
    @fishhuynh3390 2 года назад

    screen in the top left, look at where it says program and click on where it says “aggressive te” and change it to “analog app 1 te”

  • @monster_in_the_dark
    @monster_in_the_dark Год назад +4

    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);
    }
    }
    }

  • @user-el5jg3wo9b
    @user-el5jg3wo9b Год назад +2

    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?

  • @Top10-j6e6f
    @Top10-j6e6f 2 года назад

    You are/were not alone! I pray you found what has worked for you!

  • @Upper_Room_Studios
    @Upper_Room_Studios Год назад

    Hey! It's the dad from The Wild Thornberrys!

  • @LearnProfessional1
    @LearnProfessional1 2 года назад

    all the different elents together in a language that is universal. I've seen plenty of DAW tutorials being new, but tNice tutorials is by far the best so

  • @HumbleHustle101
    @HumbleHustle101 2 месяца назад

    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.

  • @anacorderoh6184
    @anacorderoh6184 2 года назад

    Thank you! That was a great tutorial!

  • @deboraliand4221
    @deboraliand4221 2 года назад

    Wohoo I got them!! Thanks so much

  • @prasadb5995
    @prasadb5995 Год назад

    Finally something that works

  • @NoCodeFilmmaker
    @NoCodeFilmmaker 2 года назад

    Whoever gave that dislike should get punched in the mouth. Great job on making a fantastic and easily comprehensible tutorial. I'm trying to add an interactive story element to my posters via AR and this was just what I needed. Thanks a million times over.

  • @tvtvtv9131
    @tvtvtv9131 2 года назад

    TNice tutorials was very helpful thankyou.

  • @lyzawastaken
    @lyzawastaken 2 года назад

    well understood. Thank you you are the best teacher.

  •  2 года назад

    Every Producer, DJ, soft Maker and writer will love tNice tutorials feature. Please encourage soft-soft to make tNice tutorials happen. Fingers

  • @bambinoesu
    @bambinoesu 2 года назад +2

    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

  • @decoodari
    @decoodari 2 года назад

    Hey! Thanks so much for this video!

  • @pix3ls53
    @pix3ls53 2 года назад +4

    Does anyone else have a problem where when deploying the program in a device, the object keeps flickering in and out when scanning?

    • @user-el5jg3wo9b
      @user-el5jg3wo9b Год назад

      I have the same issue!! Have you find the solution to that?

    • @abcdefg-hq6my
      @abcdefg-hq6my Год назад

      @@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.

  • @rekiallard77
    @rekiallard77 4 месяца назад

    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.

  • @matthiasspie5424
    @matthiasspie5424 2 года назад

    Cool stuff as usual. I like it.

  • @itohan_d_creator
    @itohan_d_creator 2 года назад

    videos on pretty much everytNice tutorialng. Feels like I can finally move forward with making soft.

  • @armangamesdev
    @armangamesdev Год назад

    thank you so much man. love ya.

  • @bennguyen1313
    @bennguyen1313 3 месяца назад

    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).

  • @winzawthan5525
    @winzawthan5525 2 года назад

    Helped A Lot! Thanks!

  • @gert2373
    @gert2373 2 года назад

    Hi
    Do you ever go back and check if there are any questions on your older projects you posted?

  • @lulupont
    @lulupont 9 месяцев назад

    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?

  • @MM-ye7og
    @MM-ye7og 2 года назад

    Nice tutorial brother i just want to ask you wNice tutorialch software is easy and best to learn as DAW soft soft or abelton live. Pls reply as soon as you can

  • @x2blader
    @x2blader Год назад +1

    I got the app to build, but it doesn't seem to recognise the images...the video it's supposed to play won't play. Please help

  • @TripwithCharlien666
    @TripwithCharlien666 Год назад

    Hello, great tut!! now, how can we test/run our oriject thru the cellphone, mine says something regarding USB cable and Unity instructions u.u

  • @engcisco
    @engcisco 2 года назад +1

    Many thanks for the great video, is it possible to export it for web using WebGL? is it supported?

  • @youniverseapparel539
    @youniverseapparel539 2 года назад

    I'm not sure about tNice tutorials, but if you wanna fix it open GMS. Then in the GMS, there's a light blue screen with a lot of buttons and other stuff.

  • @AhmadFaraz-bb9tp
    @AhmadFaraz-bb9tp Год назад

    As you have said ar session origin will be changed to xr origin they did exactly the same in the lattest version of 2022 LTS.

  • @syedaligll7474
    @syedaligll7474 2 года назад

    Thank you it works with me

  • @maxwellmoreira9911
    @maxwellmoreira9911 2 года назад +1

    For starters, congratulations for the video! great content and excellent teaching! I'm following this video for the development of a graduation project, and I wanted to integrate this project with the use of VR glasses (like google cardboard or VR Box) to visualize museum architectures in 3D. Do you have any tips on how to implement such functionality?

    • @chetantalele5841
      @chetantalele5841 Год назад +1

      Is there any way to play a RUclips video as AR instead of using a video stored on device? I actually want to create an AR app that would scan over 70 different objects and display a separate video for each one. This would increase the size of the app,hence wish to fetch the videos from RUclips.

  • @pedrodavid2599
    @pedrodavid2599 2 года назад +2

    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?

    • @henrikjorgensen6850
      @henrikjorgensen6850 2 года назад

      Hello Pedro
      I have the same problem, I just opdt. to the new version (2022.1.20f1) Have you solved your problem?

  • @tadeoac4416
    @tadeoac4416 5 месяцев назад +2

    I got a popup with this message, "Tap to place Touch surfaces to place objects"
    Someone knows how to remove it?

    • @AndrejSatnik
      @AndrejSatnik 24 дня назад +1

      Maybe too late but I still leave here a comment in case someone would wondering. In your scene you have another objects that comes with newer version of Unity, such as UI or some Inputs/Events. You should have only AR Session, AR/XR Origin and a light in your scene.

  • @mwvitorino
    @mwvitorino Год назад

    Hello, sorry for the translation via Google. When you are explaining about the event handler, is there a foreach that goes through the trackedImage variable where it is fed? Sorry for the stupid question, I program in PHP/Jquery some things are very familiar others I'm a little confused.

  • @get_seb
    @get_seb 2 года назад +1

    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?