Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice
  2. Ever participated in one our Game Jams? Want pointers on your project? Our Evangelists will be available on Friday to give feedback. Come share your games with us!
    Dismiss Notice

[Solved] How can I disable Point Cloud in AR Foundation ?

Discussion in 'AR/VR (XR) Discussion' started by DonPeto, Nov 26, 2018.

  1. DonPeto

    DonPeto

    Joined:
    Jul 16, 2018
    Posts:
    2
    Hello,

    I'm using the PlaneDectectionController.cs to enable/disable the planes but I'm looking for a way to hide the feature points too.

    I have tried something like this :
    Code (CSharp):
    1. GameObject.FindWithTag("AROrigin").GetComponent<ARPointCloudManager>().enabled = false;
    But it only freeze the feature point, not hide them.

    I have also tried to find the point cloud's game object with GameObject.Find(), ) to disable or destroy it, but I guess I don't have the good name, I tried with those string : "Point Cloud", "Point cloud", "PointCloud", "Pointcloud".

    Thank you in advance for your assistance.
     
  2. DonPeto

    DonPeto

    Joined:
    Jul 16, 2018
    Posts:
    2
    Hi again,

    I solved the problem myself. I guessed right the strings was wrong, so I print every childs' name of the gameobject "AR Session Origin" with this code :

    Code (CSharp):
    1.     public Text uiText;
    2.     GameObject trackables;
    3.  
    4.     private void Update()
    5.     {
    6.         // Get a specific gameobject with its name
    7.         trackables = GameObject.Find("Trackables");
    8.         Debug.Log(trackables.name);
    9.         // To find child in a specific gameobject
    10.         foreach (Transform child in trackables.transform)
    11.         {
    12.             Debug.Log(child.name);
    13.             this.uiText.text += child.name + "\n";
    14.         }
    15.     }
    It's probably dirty but it was working, the name of my point cloud's gameobject was "AR Default Point Cloud(Clone)".
    And after all, I destroyed it with Destroy("AR Default Point Cloud(Clone)").
     
  3. Mal_Duffin

    Mal_Duffin

    Joined:
    Jan 22, 2015
    Posts:
    46
    Hi DonPeto,

    The ARPointCloudManager only exposes the prefab, not the instance they create of the prefab ( the code doesn't keep a reference to the clone ).

    Therefore currently the only way to find it is to do a search for it, like you've done.

    You could also use code similar to below to get the name, in case the prefab is changed later on...

    // Similar to what you did before, to get the ARPointCloudManager
    ARPointCloudManager arCloudManager = arSessionOrigin.GetComponent<ARPointCloudManager>();
    GameObject goPointCloud = arCloudManager.pointCloudPrefab;
    // the prefab might not be set
    if (goPointCloud != null)
    {
    GameObject goClone = GameObject.Find(goPointCloud.name + "(Clone)");
    // check if the prefab instance has been created
    if (goClone != null)
    {
    Destroy(goClone);
    }
    }

    The ARPointCloudManager should really handle removing the particle system internally, hopefully it'll be fixed in the next update.
     
    DonPeto likes this.
  4. fotalik

    fotalik

    Joined:
    Sep 23, 2017
    Posts:
    24
    Hi, any updates?
    I know that i can use
    Code (CSharp):
    1. ARSubsystemManager.depthSubsystem.Stop()
    to stop displaying points and
    Code (CSharp):
    1. ARSubsystemManager.planeSubsystem.Stop()
    for planes.
    It works for planes, because ARPlane has an event
    boundaryChanged whitch is called when plane disabled and i just react on this to fade the plane, but for the points there is nothing like this.
     
  5. fotalik

    fotalik

    Joined:
    Sep 23, 2017
    Posts:
    24
    Oh, i know the better solution. Just need to disable pointCloud to disable all points:
    Code (CSharp):
    1. ARPointCloudManager _pointCloudManager;
    2.  
    3. //...
    4.  
    5. _pointCloudManager.pointCloud.gameObject.SetActive(false);
     
  6. karsnen

    karsnen

    Joined:
    Feb 9, 2014
    Posts:
    65
    Still not working, Anyone with a working solution

    Want to turn ON and OFF the point cloud.
     
  7. V-Jankaitis

    V-Jankaitis

    Joined:
    Nov 12, 2014
    Posts:
    5
    Tested with 2019.1.7 ArFoundation 2.1

    PointCloud.enabled = false; // stops from making new ones

    foreach (var Point in PointCloud.trackables) // removes the existing ones.
    {
    Point.gameObject.SetActive(false);
    }
     
    AlbyDj90 likes this.
  8. AlbyDj90

    AlbyDj90

    Joined:
    Feb 7, 2015
    Posts:
    33
    Great! This work well! :D
     
  9. soorya696

    soorya696

    Joined:
    Dec 13, 2018
    Posts:
    65
    Hey I need reference to 'ARPointCloudManager' (I modified the class a little bit). Your code does'nt work. 'goClone' is null. how to fix this?
     
  10. soorya696

    soorya696

    Joined:
    Dec 13, 2018
    Posts:
    65
    Solution for ARFoundation version > 2.2.x

    Code (CSharp):
    1. var points =  SessionOrigin.GetComponent<ARPointCloudManager>().trackables;
    2. foreach(var pts in points)
    3. {
    4.         pts.gameObject.SetActive(false);
    5. }
    6. SessionOrigin.GetComponent<ARPointCloudManager>().enabled = false;
    7.  
     
    Last edited: Nov 25, 2019
unityunity