相机系统是一个可扩展的系统,用于为特定于平台的相机配置提供支持。 若要添加新相机配置的支持,可能需要自定义设置提供程序。
注意
此示例中使用的完整源代码可以在 MRTK/Providers/UnityAR 文件夹中找到。
命名空间和文件夹结构
可以通过以下两种方式之一来分发数据提供程序:
- 第三方加载项
- Microsoft 混合现实 工具包的一部分
向 MRTK 提交新数据提供程序的审批流程将因具体情况而异,并将在初始建议书时传达。 可以通过创建新的 功能请求 类型问题来提交建议。
第三方加载项
命名空间
数据提供程序需要有一个命名空间来缓解潜在的名称冲突。 建议命名空间包含以下组件。
- 生产加载项的公司名称
- 功能区域
例如,Contoso 公司创建和交付的相机设置提供程序可能是“Contoso.MixedReality.Toolkit.Camera”。
文件夹结构
建议将数据提供程序的源代码布局在文件夹层次结构中,如下图所示。
               
              
            
其中,ContosoCamera 文件夹包含数据提供程序的实现,编辑器 文件夹包含检查器 (和任何其他Unity编辑器特定代码) ,并且 Profiles 文件夹包含一个或多个预先制作的配置文件可编写脚本的对象。
MRTK 提交
命名空间
如果将相机设置提供程序提交到 混合现实 Toolkit 存储库,命名空间必须以 Microsoft.MixedReality.Toolkit (例如:Microsoft.MixedReality.Toolkit.CameraSystem) 开头。
文件夹结构
所有代码都必须位于 MRTK/Providers 下的文件夹中, (例如 MRTK/Providers/UnityAR) 。
定义相机设置对象
创建相机设置提供程序的第一步是确定 (数据类型,例如:网格或平面) 它将提供给应用程序。
所有空间数据对象都必须实现 IMixedRealityCameraSettingsProvider 接口。
实现设置提供程序
指定接口和/或基类继承
所有相机设置提供程序都必须实现 IMixedRealityCameraSettingsProvider 接口,该接口指定相机系统所需的最低功能。 MRTK 基础包括 类, BaseCameraSettingsProvider 该类提供所需功能的默认实现。
namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    public class UnityARCameraSettings : BaseCameraSettingsProvider
    { }
}
应用 MixedRealityDataProvider 属性
创建相机设置提供程序的关键步骤是将 MixedRealityDataProvider 属性应用于 类。 此步骤允许在相机系统配置文件以及名称、文件夹路径等中选择时,为数据提供程序设置默认配置文件和平台 () 。
    [MixedRealityDataProvider(
        typeof(IMixedRealityCameraSystem),
        SupportedPlatforms.Android | SupportedPlatforms.IOS,
        "Unity AR Foundation Camera Settings",
        "UnityAR/Profiles/DefaultUnityARCameraSettingsProfile.asset",
        "MixedRealityToolkit.Providers")]
    public class UnityARCameraSettings : BaseCameraSettingsProvider
    { }
实现 IMixedRealityDataProvider 方法
定义 类后,下一步是提供 接口的 IMixedRealityDataProvider 实现。
注意
类 BaseDataProvider 通过 BaseService 类为方法提供空实现 IMixedRealityDataProvider 。 这些方法的详细信息通常是特定于数据提供程序的。
数据提供程序应实现的方法包括:
- Destroy()
- Disable()
- Enable()
- Initialize()
- Reset()
- Update()
注意
并非所有设置提供程序都需要所有这些方法的实现。 强烈建议 Destroy() 至少实现 和 Initialize() 。
实现数据提供程序逻辑
下一步是通过实现 IMixedRealityCameraSettingsProvider添加设置提供程序的逻辑。 数据提供程序的这一部分通常特定于相机配置。
创建配置文件和检查器
在 混合现实 Toolkit 中,使用配置文件配置数据提供程序。
定义配置文件
配置文件内容应镜像开发人员可选择的配置选项。 每个接口中定义的任何用户可配置属性也应包含在配置文件中。
using UnityEngine.SpatialTracking;
namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    [CreateAssetMenu(
        menuName = "Mixed Reality Toolkit/Profiles/Unity AR Camera Settings Profile",
        fileName = "UnityARCameraSettingsProfile",
        order = 100)]
    public class UnityARCameraSettingsProfile : BaseCameraSettingsProfile
    {
        [SerializeField]
        [Tooltip("The portion of the device (ex: color camera) from which to read the pose.")]
        private ArTrackedPose poseSource = TrackedPoseDriver.TrackedPose.ColorCamera;
        /// <summary>
        /// The portion of the device (ex: color camera) from which to read the pose.
        /// </summary>
        public ArTrackedPose PoseSource => poseSource;
        [SerializeField]
        [Tooltip("The type of tracking (position and/or rotation) to apply.")]
        private ArTrackingType trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;
        /// <summary>
        /// The type of tracking (position and/or rotation) to apply.
        /// </summary>
        public ArTrackingType TrackingType => trackingType;
        [SerializeField]
        [Tooltip("Specifies when (during Update and/or just before rendering) to update the tracking of the pose.")]
        private ArUpdateType updateType = TrackedPoseDriver.UpdateType.UpdateAndBeforeRender;
        /// <summary>
        /// Specifies when (during Update and/or just before rendering) to update the tracking of the pose.
        /// </summary>
        public ArUpdateType UpdateType => updateType;
    }
}
属性CreateAssetMenu可以应用于配置文件类,使客户能够使用“创建>资产>混合现实工具包>配置文件”菜单创建配置文件实例。
实现检查器
配置文件检查器是用于配置和查看配置文件内容的用户界面。 每个配置文件检查器应扩展 BaseMixedRealityToolkitConfigurationProfileInspector 类。
属性CustomEditor通知Unity检查器所应用的资产类型。
namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    [CustomEditor(typeof(UnityARCameraSettingsProfile))]
    public class UnityARCameraSettingsProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
    { }
}
创建程序集定义 ()
混合现实工具包使用程序集定义 (.asmdef) 文件来指定组件之间的依赖关系,并帮助Unity缩短编译时间。
建议为所有数据提供程序及其编辑器组件创建程序集定义文件。
使用前面的示例中 的文件夹结构 ,ContosoCamera 数据提供程序将有两个 .asmdef 文件。
第一个程序集定义用于数据提供程序。 对于此示例,它将称为 ContosoCamera,并将位于示例的 ContosoCamera 文件夹中。 此程序集定义必须指定Microsoft.MixedReality.Toolkit 及其所依赖的任何其他程序集的依赖项。
ContosoCameraEditor 程序集定义将指定配置文件检查器和任何编辑器特定的代码。 此文件必须位于编辑器代码的根文件夹中。 在此示例中,文件将位于 ContosoCamera\编辑器 文件夹中。 此程序集定义将包含对 ContosoCamera 程序集的引用以及:
- Microsoft.MixedReality.Toolkit
- Microsoft.MixedReality.Toolkit。编辑器。督察
- Microsoft.MixedReality.Toolkit。编辑器。公用事业
注册数据提供程序
创建后,可以将数据提供程序注册到相机系统,以在应用程序中使用。
               
              
            
打包和分发
作为第三方组件分发的数据提供程序具有打包和分发的具体详细信息,留给开发人员的首选项。 最常见的解决方案可能是生成 .unitypackage 并通过 Unity 资产存储进行分发。
如果数据提供程序作为Microsoft 混合现实 工具包包的一部分提交并接受,Microsoft MRTK 团队将打包并分发为 MRTK 产品/服务的一部分。