Is there a way to check if ARMeshManager (aka Scene Reconstruction on iOS with the new iPad) will work on a given device? I need to change some behaviour depending on whether I'm getting planes or meshes from the device (I know you can use both at the same time but it causes issues in my use case)
You can check if meshing subsystem is created by ARMeshManager manager: var isMeshingSupported = FindObjectOfType<ARMeshManager>().subsystem != null;
In my experience, you can't check if some AR feature is supported on Awake. You are required to wait until ARSession.state == ARSessionState.Ready and only then you can tell if current device supports specific AR capability. If you're running on Android, you also need to account for the case if ARCore is not installed on device and install it with ARSession.Install()
I wrote a little script that throws events if meshing is supported or not on Awake. I'm using it to change the ARCoachingGoal depending on mesh support or note. https://gist.github.com/edwonia/45b1970ee82c4b684cba6b89cd1ddcc4
It seems to me I've found a clean solution without the need to use coroutines and wait for ARSession.state >= Ready. It can be even used in Awake(). Code (CSharp): public static bool IsMeshSubsystemSupported() { var subsystems = new List<XRMeshSubsystem>(); SubsystemManager.GetInstances(subsystems); return subsystems.Any(); }