您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

443 行
14 KiB

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARSubsystems;
#if UNITY_IOS
using UnityEngine.XR.ARKit;
#endif
using UnityEngine.XR.Management;
namespace UnityEngine.XR.ARFoundation.Samples
{
public class CheckAvailableFeatures : MonoBehaviour
{
[SerializeField]
Button m_SimpleAR;
public Button simpleAR
{
get { return m_SimpleAR; }
set { m_SimpleAR = value; }
}
[SerializeField]
Button m_ImageTracking;
public Button imageTracking
{
get { return m_ImageTracking; }
set { m_ImageTracking = value; }
}
[SerializeField]
Button m_Anchors;
public Button anchors
{
get { return m_Anchors; }
set { m_Anchors = value; }
}
[SerializeField]
Button m_ARWorldMap;
public Button ARWorldMap
{
get { return m_ARWorldMap; }
set { m_ARWorldMap = value; }
}
[SerializeField]
Button m_CpuImages;
public Button cpuImages
{
get { return m_CpuImages; }
set { m_CpuImages = value; }
}
[SerializeField]
Button m_EnvironmentProbes;
public Button environmentProbes
{
get { return m_EnvironmentProbes; }
set { m_EnvironmentProbes = value; }
}
[SerializeField]
Button m_ARCollaborationData;
public Button ARCollaborationData
{
get { return m_ARCollaborationData; }
set { m_ARCollaborationData = value; }
}
[SerializeField]
Button m_ARKitCoachingOverlay;
public Button ARKitCoachingOverlay
{
get { return m_ARKitCoachingOverlay; }
set { m_ARKitCoachingOverlay = value; }
}
[SerializeField]
Button m_Scale;
public Button scale
{
get { return m_Scale; }
set { m_Scale = value; }
}
[SerializeField]
Button m_ObjectTracking;
public Button objectTracking
{
get { return m_ObjectTracking; }
set { m_ObjectTracking = value; }
}
[SerializeField]
Button m_PlaneOcclusion;
public Button planeOcclusion
{
get { return m_PlaneOcclusion; }
set { m_PlaneOcclusion = value; }
}
[SerializeField]
Button m_PointCloud;
public Button pointCloud
{
get { return m_PointCloud; }
set { m_PointCloud = value; }
}
[SerializeField]
Button m_FaceTracking;
public Button faceTracking
{
get { return m_FaceTracking; }
set { m_FaceTracking = value; }
}
[SerializeField]
Button m_FaceBlendShapes;
public Button faceBlendShapes
{
get { return m_FaceBlendShapes; }
set { m_FaceBlendShapes = value; }
}
[SerializeField]
Button m_FaceRegions;
public Button faceRegions
{
get { return m_FaceRegions; }
set { m_FaceRegions = value; }
}
[SerializeField]
Button m_BodyTracking;
public Button bodyTracking
{
get { return m_BodyTracking; }
set { m_BodyTracking = value; }
}
[SerializeField]
Button m_LightEstimation;
public Button lightEstimation
{
get { return m_LightEstimation; }
set { m_LightEstimation = value; }
}
[SerializeField]
Button m_PlaneDetection;
public Button planeDetection
{
get { return m_PlaneDetection; }
set { m_PlaneDetection = value; }
}
[SerializeField]
Button m_PlaneClassification;
public Button planeClassification
{
get { return m_PlaneClassification; }
set { m_PlaneClassification = value; }
}
[SerializeField]
Button m_Meshing;
public Button meshing
{
get { return m_Meshing; }
set { m_Meshing = value; }
}
[SerializeField]
Button m_Interaction;
public Button interaction
{
get { return m_Interaction; }
set { m_Interaction = value; }
}
[SerializeField]
Button m_FixationPoint;
public Button fixationPoint
{
get { return m_FixationPoint; }
set { m_FixationPoint = value; }
}
[SerializeField]
Button m_EyePoses;
public Button eyePoses
{
get { return m_EyePoses; }
set { m_EyePoses = value; }
}
[SerializeField]
Button m_EyeLasers;
public Button eyeLasers
{
get { return m_EyeLasers; }
set { m_EyeLasers = value; }
}
[SerializeField]
Button m_SampleUX;
public Button sampleUX
{
get { return m_SampleUX; }
set { m_SampleUX = value; }
}
[SerializeField]
Button m_CheckSupport;
public Button checkSupport
{
get { return m_CheckSupport; }
set { m_CheckSupport = value; }
}
[SerializeField]
Button m_Depth;
public Button depth
{
get { return m_Depth; }
set { m_Depth = value; }
}
[SerializeField]
Button m_ConfigChooser;
public Button configChooser
{
get => m_ConfigChooser;
set => m_ConfigChooser = value;
}
[SerializeField]
Button m_InputSystem;
public Button inputSystem
{
get => m_InputSystem;
set => m_InputSystem = value;
}
// Start is called before the first frame update
void Start()
{
var planeDescriptors = new List<XRPlaneSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRPlaneSubsystemDescriptor>(planeDescriptors);
var rayCastDescriptors = new List<XRRaycastSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRRaycastSubsystemDescriptor>(rayCastDescriptors);
var faceDescriptors = new List<XRFaceSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRFaceSubsystemDescriptor>(faceDescriptors);
var imageDescriptors = new List<XRImageTrackingSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRImageTrackingSubsystemDescriptor>(imageDescriptors);
var envDescriptors = new List<XREnvironmentProbeSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XREnvironmentProbeSubsystemDescriptor>(envDescriptors);
var anchorDescriptors = new List<XRAnchorSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRAnchorSubsystemDescriptor>(anchorDescriptors);
var objectDescriptors = new List<XRObjectTrackingSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRObjectTrackingSubsystemDescriptor>(objectDescriptors);
var participantDescriptors = new List<XRParticipantSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRParticipantSubsystemDescriptor>(participantDescriptors);
var depthDescriptors = new List<XRDepthSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRDepthSubsystemDescriptor>(depthDescriptors);
var occlusionDescriptors = new List<XROcclusionSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XROcclusionSubsystemDescriptor>(occlusionDescriptors);
var cameraDescriptors = new List<XRCameraSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRCameraSubsystemDescriptor>(cameraDescriptors);
var sessionDescriptors = new List<XRSessionSubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRSessionSubsystemDescriptor>(sessionDescriptors);
var bodyTrackingDescriptors = new List<XRHumanBodySubsystemDescriptor>();
SubsystemManager.GetSubsystemDescriptors<XRHumanBodySubsystemDescriptor>(bodyTrackingDescriptors);
if(planeDescriptors.Count > 0 && rayCastDescriptors.Count > 0)
{
m_SimpleAR.interactable = true;
m_Scale.interactable = true;
m_Interaction.interactable = true;
m_SampleUX.interactable = true;
m_CheckSupport.interactable = true;
m_ConfigChooser.interactable = true;
m_InputSystem.interactable = true;
}
if(faceDescriptors.Count > 0)
{
m_FaceTracking.interactable = true;
#if UNITY_IOS
m_FaceBlendShapes.interactable = true;
#endif
#if UNITY_ANDROID
m_FaceRegions.interactable = true;
#endif
foreach(var faceDescriptor in faceDescriptors)
{
if(faceDescriptor.supportsEyeTracking)
{
m_EyePoses.interactable = true;
m_FixationPoint.interactable = true;
m_EyeLasers.interactable = true;
break;
}
}
}
if(occlusionDescriptors.Count > 0)
{
foreach(var occlusionDescriptor in occlusionDescriptors)
{
#if UNITY_IOS
if(occlusionDescriptor.supportsEnvironmentDepthImage
|| occlusionDescriptor.supportsHumanSegmentationDepthImage
|| occlusionDescriptor.supportsHumanSegmentationStencilImage)
{
m_Depth.interactable = true;
}
#endif
#if UNITY_ANDROID
m_Depth.interactable = true;
#endif
}
}
if(bodyTrackingDescriptors.Count > 0)
{
foreach(var bodyTrackingDescriptor in bodyTrackingDescriptors)
{
if(bodyTrackingDescriptor.supportsHumanBody2D || bodyTrackingDescriptor.supportsHumanBody3D)
{
m_BodyTracking.interactable = true;
}
}
}
if(cameraDescriptors.Count > 0)
{
foreach(var cameraDescriptor in cameraDescriptors)
{
if((cameraDescriptor.supportsAverageBrightness || cameraDescriptor.supportsAverageIntensityInLumens) &&
cameraDescriptor.supportsAverageColorTemperature && cameraDescriptor.supportsCameraConfigurations &&
cameraDescriptor.supportsCameraImage)
{
m_LightEstimation.interactable = true;
}
}
}
if(imageDescriptors.Count > 0)
{
m_ImageTracking.interactable = true;
}
if(envDescriptors.Count > 0)
{
m_EnvironmentProbes.interactable = true;
}
if(planeDescriptors.Count > 0)
{
m_PlaneDetection.interactable = true;
foreach(var planeDescriptor in planeDescriptors)
{
if(planeDescriptor.supportsClassification)
{
m_PlaneClassification.interactable = true;
break;
}
}
}
if(anchorDescriptors.Count > 0)
{
m_Anchors.interactable = true;
}
if(objectDescriptors.Count > 0)
{
m_ObjectTracking.interactable = true;
}
if(cameraDescriptors.Count > 0)
{
foreach(var cameraDescriptor in cameraDescriptors)
{
if(cameraDescriptor.supportsCameraImage)
{
m_CpuImages.interactable = true;
break;
}
}
}
#if UNITY_IOS
if(sessionDescriptors.Count > 0 && ARKitSessionSubsystem.worldMapSupported)
{
m_ARWorldMap.interactable = true;
}
if(planeDescriptors.Count > 0 && rayCastDescriptors.Count > 0 && participantDescriptors.Count > 0 && ARKitSessionSubsystem.supportsCollaboration)
{
m_ARCollaborationData.interactable = true;
}
if(sessionDescriptors.Count > 0 && ARKitSessionSubsystem.coachingOverlaySupported)
{
m_ARKitCoachingOverlay.interactable = true;
}
#endif
if(depthDescriptors.Count > 0)
{
m_PointCloud.interactable = true;
}
if(planeDescriptors.Count > 0)
{
m_PlaneOcclusion.interactable = true;
}
var activeLoader = LoaderUtility.GetActiveLoader();
if(activeLoader && activeLoader.GetLoadedSubsystem<XRMeshSubsystem>() != null)
{
m_Meshing.interactable = true;
}
}
}
}