从早期版本更新 - MRTK2

查找当前版本

按照以下说明确定当前使用的 MRTK 版本:

  1. 在 Unity 中打开你的 MRTK 项目
  2. 在“项目”窗口中导航到“MixedRealityToolkit”文件夹
  3. 打开名为“Version”的文件

如果上面的文件和文件夹不存在,则表示使用的是新版 MRTK。 在这种情况下,请尝试以下操作:

  1. 导航到“混合现实工具包基础”文件夹
  2. 单击“package.json”以在 Unity 中查看预览或使用文本编辑器打开
  3. 找到包含“version:”文字的行

升级到新版 MRTK

强烈建议在获得 MRTK 更新后运行迁移工具以自动修复并将已弃用的组件升级,以适应重大变更。 迁移工具是“工具”包的一部分

以下说明介绍了从 2.4.0 到 2.5.0 的升级路径。 如果你的项目是 2.3.0 或更低版本,请阅读版本之间的变更以了解升级路径,或阅读先前发行说明以进行逐个版本的升级。

混合现实功能工具

将 MRTK 升级到更新版本 MRTK 的最简单方法是使用混合现实功能工具下载最新的包并将它们直接加载到你的 Unity 项目中。

如果项目以前使用过 Unity 资产 (.unitypackage) 文件,请参阅这些说明

Unity 资产 (.unitypackage) 文件

另一条升级路径是手动下载 MRTK Unity 包并将其应用于项目。 参阅下面的步骤。

  1. 保存当前项目的副本,以防在执行升级步骤过程中遇到任何问题。
  2. 关闭 Unity
  3. 在 Assets 文件夹中,删除以下 MRTK 文件夹及其 .meta 文件(项目中可能不包含所有列出的文件夹)
    • MRTK/Core
    • MRTK/Examples
    • MRTK/Extensions
    • MRTK/Providers
    • MRTK/SDK
    • MRTK/Services
    • MRTK/StandardAssets

    重要

    如果对 MRTK 着色器进行了修改,请在删除 MRTK/StandardAssets 文件夹之前创建本地备份

    • MRTK/Tools

    重要

    请不要删除 MixedRealityToolkit.Generated 文件夹或其 .meta 文件

  4. 删除 Library 文件夹

    重要

    某些 Unity 工具(如 Unity Collab)会将配置信息保存到 Library 文件夹。 如果使用执行此操作的工具,在删除 Library 文件夹之前,请先从中复制工具的数据文件夹,然后在重新生成 Library 文件夹之后再还原数据文件夹。

  5. 在 Unity 中重新打开项目
  6. 导入新的 unity 包
    • Foundation - 先导入这个包
    • 工具
    • (可选)扩展

    注意

    如果安装了其他扩展,则可能需要重新导入这些扩展。

    • (可选)示例
  7. 关闭 Unity 并删除 Library 文件夹(请先阅读下面的注释!)。 要强制 Unity 刷新其资产数据库并协调现有自定义配置文件,必须执行此步骤。
  8. 启动 Unity,并针对项目中的每个场景执行以下操作
    • 从层次结构中删除 MixedRealityToolkit 和 MixedRealityPlayspace(如果存在)。 这将删除主相机,但将在下一步中重新创建。 如果主相机的任何属性已被手动更改,则必须在创建新相机后手动重新应用这些属性。
    • 选择 MixedRealityToolkit - 添加到场景并配置>
    • 选择“MixedRealityToolkit”->“实用工具”->“更新”->“控制器映射配置文件”(只需要执行一次)。这将使用更新后的轴和数据更新任何自定义控制器映射配置文件,同时让自定义分配的输入操作保持不变
  9. 运行迁移工具并对“完整项目”运行该工具以确保所有代码都更新到最新版本。 迁移窗口包含许多不同的迁移处理程序,它们必须各自独立运行。 这一步包括:
    • 从“迁移处理程序选择”下拉列表中选择第一个迁移处理程序。
    • 单击“完整项目”按钮。
    • 单击“添加要迁移的完整项目”按钮(这将扫描整个项目以查找要迁移的对象)。
    • 单击“迁移”按钮(如果找到了任何可迁移对象,则该按钮应该会处于启用状态)。
    • 对下拉列表中的每个迁移处理程序重复前三个步骤。 (请参阅此问题,其中介绍了在未来版本中可以完成哪些工作以简化这种迁移过程)

从 Unity 资产文件切换到混合现实功能工具

从 Unity 资产文件切换到混合现实功能工具包带来了许多好处:

  • 更容易更新
  • 缩短编译时间
  • 减少 Visual Studio 解决方案中的项目数量

更改为使用混合现实功能工具需要一系列手动步骤,但只需要执行一次。

  1. 保存当前项目的副本。
  2. 关闭 Unity
  3. 在 Assets 文件夹中,删除以下 MRTK 文件夹及其 .meta 文件(项目中可能不包含所有列出的文件夹)
    • MRTK/Core
    • MRTK/Examples
    • MRTK/Extensions
    • MRTK/Providers
    • MRTK/SDK
    • MRTK/Services
    • MRTK/StandardAssets

    重要

    如果对 MRTK 着色器进行了修改,请在删除 MRTK/StandardAssets 文件夹之前创建本地备份

    • MRTK/Tools

    重要

    请不要删除 MixedRealityToolkit.Generated 文件夹或其 .meta 文件

  4. 删除 Library 文件夹

    重要

    某些 Unity 工具(如 Unity Collab)会将配置信息保存到 Library 文件夹。 如果使用执行此操作的工具,在删除 Library 文件夹之前,请先从中复制工具的数据文件夹,然后在重新生成 Library 文件夹之后再还原数据文件夹。

  5. 在 Unity 中重新打开项目

执行上述步骤后,运行混合现实功能工具并导入所需版本的混合现实工具包。

将 2.3.0 更新为 2.4.0

文件夹重命名API 更改

2.4.0 中的文件夹重命名

在版本 2.4 中,MixedRealityToolkit 文件夹已重命名并移动到通用层次结构中。 如果应用程序使用 MRTK 资源的硬编码路径,则需要根据下表更新它们。

之前的文件夹 新建文件夹
MixedRealityToolkit MRTK/Core
MixedRealityToolkit.Examples MRTK/Examples
MixedRealityToolkit.Extensions MRTK/Extensions
MixedRealityToolkit.Providers MRTK/Providers
MixedRealityToolkit.SDK MRTK/SDK
MixedRealityToolkit.Services MRTK/Services
MixedRealityToolkit.Tests MRTK/Tests
MixedRealityToolkit.Tools MRTK/Tools

重要

MixedRealityToolkit.Generated 包含客户生成的文件,并且保持不变。

2.4.0 中的眼睛视线设置

此版本的 MRTK 修改了眼睛视线设置所需的步骤。 “IsEyeTrackingEnabled”复选框可以在输入指针配置文件的视线设置中找到。 选中此框将启用基于眼睛的视线,而不是默认的基于头部跟踪的视线。

有关这些更改的详细信息以及眼动跟踪设置的完整说明,请参阅眼动跟踪一文。

2.4.0 中的眼睛视线指针行为

眼睛视线默认指针行为已修改以匹配头部跟踪视线的默认指针行为。 一旦检测到手部,系统将自动抑制眼睛视线指针。 在说出“选择”后,眼睛视线指针将再次可见。

有关视线和手部设置的详细信息,请参阅眼睛和手部一文。

2.4.0 中的 API 更改

自定义控制器类

自定义控制器类以前必须定义 SetupDefaultInteractions(Handedness)。 此方法在 2.4 中已过时,因为惯用手参数与控制器类自己的惯用手彼此重复。 这个新方法没有任何参数。 此外,许多控制器类以相同的方式 (AssignControllerMappings(DefaultInteractions);) 定义了这一点,因此完整调用已重构为 BaseController 并且进行了可选替代,而非必需。

眼睛视线属性

IMixedRealityEyeGazeProviderGazeProvider 实现中的 UseEyeTracking 属性已重命名为 IsEyeTrackingEnabled

如果之前已这样做…

if (CoreServices.InputSystem.GazeProvider is GazeProvider gazeProvider)
{
    gazeProvider.UseEyeTracking = true;
}

立即执行此操作…

if (CoreServices.InputSystem.GazeProvider is GazeProvider gazeProvider)
{
    gazeProvider.IsEyeTrackingEnabled = true;
}

WindowsApiChecker 属性

以下 WindowsApiChecker 属性已标记为过时。 请使用 IsMethodAvailableIsPropertyAvailableIsTypeAvailable

  • UniversalApiContractV8_IsAvailable
  • UniversalApiContractV7_IsAvailable
  • UniversalApiContractV6_IsAvailable
  • UniversalApiContractV5_IsAvailable
  • UniversalApiContractV4_IsAvailable
  • UniversalApiContractV3_IsAvailable

我们未计划在将来的 API 合约版本中为 WindowsApiChecker 添加属性。

只读 GltfMeshPrimitiveAttributes

以前,gltf 网格基元属性是可设置的,但现在是只读的。 这些属性的值将在反序列化时设置一次。

自定义按钮图标迁移

以前,自定义按钮图标需要为按钮的四边形渲染器分配新材料。 现在已经不需要这样做了,我们建议将自定义图标纹理移动到 IconSet 中。 现有的自定义材料和图标将会保留。 但在升级之前,它们并不是最佳的。 若要将项目中所有按钮上的资产升级到新的推荐格式,请使用 ButtonConfigHelperMigrationHandler。 (混合现实工具包 -> 实用程序 -> 迁移窗口 -> 迁移处理程序选择 -> Microsoft.MixedReality.Toolkit.Utilities.ButtonConfigHelperMigrationHandler)

Upgrade window dialogue

如果在迁移过程中在默认图标集中找不到图标,则将在 MixedRealityToolkit.Generated/CustomIconSets 中创建自定义图标集。 一个对话框将指示已发生此情况。

Custom icon notification

将 2.2.0 更新到 2.3.0

2.3.0 中的 API 更改

ControllerPoseSynchronizer

专用字段 ControllerPoseSynchronizer.handedness 已标记为过时。 这对应用程序几乎没有影响,因为该字段在其类的外部不可见。

已删除公共属性 ControllerPoseSynchronizer.Handedness 的 setter (#7012)。

MSBuild for Unity

此版本的 MRTK 使用比以前版本更新的 MSBuild for Unity 版本。 在项目加载期间,如果旧版本在 Unity Package Manger 清单中列出,则会出现配置对话框,且选中了“启用 MSBuild for Unity”选项。 如果应用,则将执行升级。

ScriptingUtilities

在 Microsoft.MixedReality.Toolkit.Editor.Utilities 程序集中,ScriptingUtilities 类已标记为过时并已由 ScriptUtilities 取代。 新类改进了以前的行为,并且现在支持移除脚本。

虽然现有代码仍可在版本 2.3.0 中继续正常运行,但建议更新到新类。

ShellHandRayPointer

ShellHandRayPointer 类的 lineRendererSelected 和 lineRendererNoTarget 成员已分别替换为 lineMaterialSelected 和 lineMaterialNoTarget (#6863)。

请将 lineRendererSelected 替换为 lineMaterialSelected 且/或将 lineRendererNoTarget 替换为 lineMaterialNoTarget 以解决编译错误。

空间观察器 StartupBehavior

现在,基于 BaseSpatialObserver 类构建的空间观察器在重新启用时会采用 StartupBehavior 的值 (#6919)。

无需进行任何更改即可利用此修补程序。

UX 控件预制件已更新为使用 PressableButton

进行近距交互时,以下预制件现在使用 PressableButton 组件,而不是 TouchHandler (7070)

  • AnimationButton
  • Button
  • ButtonHoloLens1
  • ButtonHoloLens1Toggle
  • CheckBox
  • RadialSet
  • ToggleButton
  • ToggleSwitch
  • UnityUIButton
  • UnityUICheckboxButton
  • UnityUIRadialButton
  • UnityUIToggleButton

由于此更改,应用程序代码可能需要更新。

WindowsMixedRealityUtilities 命名空间

WindowsMixedRealityUtilities 的命名空间已从 Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input 更改为 Microsoft.MixedReality.Toolkit.WindowsMixedReality (#6863)。

请更新 #using 语句以解决编译错误。

将 2.1.0 更新到 2.2.0

2.2.0 中的 API 更改

IMixedRealityBoundarySystem.Contains

该方法以前采用一个由 Unity 定义的试验性枚举。 该方法现在采用由 MRTK 定义的枚举,与 Unity 枚举相同。 这一更改有助于为 Unity 未来的边界 API 准备 MRTK。

MixedRealityServiceProfileAttribute

为了更好地描述关于支持配置文件的要求,更新了 MixedRealityServiceProfileAttribute,目的是增加可选的排除类型集合。 作为此更改的一部分,ServiceType 属性已从 Type 更改为 Type[] 并重命名为 RequiredTypes。

还额外增加了 ExcludedTypes 属性。

将 2.0.0 更新到 2.1.0

2.1.0 中的 API 更改

BaseNearInteractionTouchable

已修改 BaseNearInteractionTouchable,以将 OnValidate 方法标记为虚拟。 用于扩展 BaseNearInteractionTouchable 的类(例如 NearInteractionTouchableUnityUI)已更新,以反映此更改。

ColliderNearInteractionTouchable

ColliderNearInteractionTouchable 类已弃用。 请将代码引用更新为使用 BaseNearInteractionTouchable

IMixedRealityMouseDeviceManager

已添加

IMixedRealityMouseDeviceManager 添加了 CursorSpeedWheelSpeed 属性。 这两个属性允许应用程序指定一个乘数值,光标和滚轮的速度将分别通过该乘数值进行缩放。

这是一个中断性变更,需要修改现有的鼠标设备管理器实现方式。

注意

此更改不向后兼容 2.0.0 版。

已弃用

MouseInputProfile 属性已标记为过时,将从以后的 Microsoft Mixed Reality Toolkit 版本中删除。 建议今后不要在应用程序代码中使用此属性。

可交互对象

以下方法和属性已弃用,将从以后的 Microsoft Mixed Reality Toolkit 版本中删除。 建议根据 Obsolete 属性中包含的指导以及控制台中显示的指导来更新应用程序代码。

  • public bool Enabled
  • public bool FocusEnabled
  • public void ForceUpdateThemes()
  • public bool IsDisabled
  • public bool IsToggleButton
  • public int GetDimensionIndex()
  • public State[] GetStates()
  • public bool RequiresFocus
  • public void ResetBaseStates()
  • public virtual void SetCollision(bool collision)
  • public virtual void SetCustom(bool custom)
  • public void SetDimensionIndex(int index)
  • public virtual void SetDisabled(bool disabled)
  • public virtual void SetFocus(bool focus)
  • public virtual void SetGesture(bool gesture)
  • public virtual void SetGestureMax(bool gesture)
  • public virtual void SetGrab(bool grab)
  • public virtual void SetInteractive(bool interactive)
  • public virtual void SetObservation(bool observation)
  • public virtual void SetObservationTargeted(bool targeted)
  • public virtual void SetPhysicalTouch(bool touch)
  • public virtual void SetPress(bool press)
  • public virtual void SetTargeted(bool targeted)
  • public virtual void SetToggled(bool toggled)
  • public virtual void SetVisited(bool visited)
  • public virtual void SetVoiceCommand(bool voice)

NearInteractionTouchableSurface

添加了 NearInteractionTouchableSurface 类,现在它充当 NearInteractionTouchableNearInteractionTouchableUnityUI 的基类。

2.1.0 中的配置文件更改

手部跟踪配置文件

手部网格和关节可视化现在具有单独的编辑器和播放器设置。 手部跟踪配置文件已更新,允许将这些可视化设置为:“无”、“全部”、“编辑器”或“播放器”。

Hand visualization modes

自定义手部跟踪配置文件可能需要更新才能在 2.1.0 版中正常工作。

注意

此更改不向后兼容 2.0.0 版。

输入模拟配置文件

输入模拟系统已升级,更改了输入模拟配置文件中的一些设置。 某些更改无法自动迁移,用户可能会发现配置文件在使用默认值。

  1. 配置文件中的所有 KeyCode 和鼠标按钮绑定都已替换为通用的 KeyBinding 结构,该结构存储绑定类型(按键或鼠标)以及实际绑定代码(分别为 KeyCode 或鼠标按钮编号)。 该结构具有自身的检查器,支持统一显示并提供“自动绑定”工具,按下相应的键即可快速设置按键绑定(不用从巨大的下拉列表中选择)。

    • FastControlKey
    • ToggleLeftHandKey
    • ToggleRightHandKey
    • LeftHandManipulationKey
    • RightHandManipulationKey
  2. MouseLookToggle 以前作为 InputSimulationMouseButton.Focused 包含在 MouseLookButton 枚举中,现在是一个单独选项。 启用后,在松开按钮后相机将继续使用鼠标旋转,直到按下 Esc 键。

  3. HandDepthMultiplier 默认值已从 0.1 降低到 0.03,以适应对输入模拟的一些更改。 如果相机在滚动时移动过快,请尝试降低此值。

  4. 用于旋转手的按键已被移除,手部旋转现在也由鼠标控制。 按住 HandRotateButton (Ctrl) 和左/右手操控键 (LShift/Space) 将启用手部旋转。

  5. 输入轴列表中引入了一个新轴“UpDown”。 这个新的轴控制相机在垂直方向的移动(默认为 Q/E 键)以及控制器触发按钮。

有关这些更改的更多信息,请参阅输入模拟服务一文。

鼠标数据提供程序配置文件

鼠标数据提供程序配置文件已更新,会公开新的 CursorSpeedWheelSpeed 属性。 现有的自定义配置文件将自动提供默认值。 保存配置文件后,这些新值将持久保留。

控制器映射配置文件

一些轴和输入类型在 2.1.0 中已经更新,尤其是围绕 OpenVR 平台。 升级时请务必选择“MixedRealityToolkit”->“实用工具”->“更新”->“控制器映射配置文件”。 这将使用更新后的轴和数据来更新任何自定义控制器映射配置文件,同时自定义分配的输入操作保持不变。

将 RC2 更新到 2.0.0

在 Microsoft 混合现实工具包的 RC2 和 2.0.0 版本之间,进行的更改可能影响现有项目。 本文档介绍了这些更改以及如何将项目更新到 2.0.0 版本。

2.0.0 中的 API 更改

自 RC2 发布以来,许多 API 都有更改,其中一些更改可能会破坏现有项目。 以下部分介绍了 RC2 和 2.0.0 版本之间发生的更改。

MixedRealityToolkit

MixedRealityToolkit 对象上的以下公共属性已弃用。

  • RegisteredMixedRealityServices 不再包含注册扩展服务和数据提供程序的集合。

若要访问扩展服务,请使用 MixedRealityServiceRegistry.TryGetService<T>。 若要访问数据提供程序,请将服务实例强制转换为 IMixedRealityDataProviderAccess 并使用 GetDataProvider<T>

对于以下已弃用的属性,请改用 MixedRealityServiceRegistryCoreServices

  • ActiveSystems
  • InputSystem
  • BoundarySystem
  • CameraSystem
  • SpatialAwarenessSystem
  • TeleportSystem
  • DiagnosticsSystem
  • SceneSystem

CoreServices

CoreServices 类取代了 MixedRealityToolkit 对象中的静态系统访问器(例如 BoundarySystem)。

重要

版本 2.0.0 中弃用了 MixedRealityToolkit 系统访问器,在将来的 MRTK 版本中会将其删除。

以下代码示例演示了旧模式和新模式。

// Old
GameObject playAreaVisualization = MixedRealityToolkit.BoundarySystem?.GetPlayAreaVisualization();

// New
GameObject playAreaVisualization = CoreServices.BoundarySystem?.GetPlayAreaVisualization();

如果你将应用程序更改为使用不同的服务注册器(例如某个试验性服务管理器),则使用新的 CoreSystem 类可确保应用程序代码不需要更新。

IMixedRealityRaycastProvider

由于添加了 IMixedRealityRaycastProvider,输入系统配置配置文件已更改。 如果你使用自定义配置文件,则在运行应用程序时可能会遇到下图中所示的错误。

Selecting the Raycast provider 1

若要修复这些问题,请将 IMixedRealityRaycastProvider 实例添加到输入系统配置文件。

Selecting the Raycast provider 2

事件系统

  • IMixedRealityEventSystem 的旧 API 方法 RegisterUnregister 已标记为过时。 保留这两个 API 方法的目的是为了向后兼容。
  • InputSystemGlobalListener 已标记为过时。 其功能无变化。
  • BaseInputHandler 基类已从 InputSystemGlobalListener 更改为 InputSystemGlobalHandlerListener。 对于 BaseInputHandler 的任何后代,这是一项中断性变更。

更改背后的动机

旧的事件系统 API RegisterUnregister 可能会在运行时导致多种问题,主要是:

  • 如果某个组件注册了全局事件,则该组件将接收所有类型的全局输入事件
  • 如果对象上的某个组件注册了全局输入事件,则该对象上的所有组件都将接收所有类型的全局输入事件
  • 如果同一对象上的两个组件注册到全局事件,之后其中一个组件在运行时被禁用,则第二个组件将停止接收全局事件。

新 API RegisterHandlerUnregisterHandler

  • 以显式和细粒度方式控制哪些输入事件应该全局监听以及哪些应该基于焦点。
  • 允许同一对象上的多个组件相互独立地侦听全局事件。

如何迁移

  • 如果你以前直接调用 Register/Unregister API,请将这些调用替换为 RegisterHandler/UnregisterHandler 调用。 使用实现为泛型参数的处理程序接口。 如果你实现多个接口,并且其中的多个接口侦听全局输入事件,请多次调用 RegisterHandler
  • 如果过去一直从 InputSystemGlobalListener 继承,请将继承更改为 InputSystemGlobalHandlerListener。 实现 RegisterHandlersUnregisterHandlers 抽象方法。 在实现中调用 inputSystem.RegisterHandler (inputSystem.UnregisterHandler) 以注册要侦听其全局事件的所有处理程序接口。
  • 如果过去一直从 BaseInputHandler 继承,请实现 RegisterHandlersUnregisterHandlers 抽象方法(与 InputSystemGlobalListener 相同)。

迁移示例

// Old
class SampleHandler : MonoBehaviour, IMixedRealitySourceStateHandler, IMixedRealityHandJointHandler
{
    private void OnEnable()
    {
        InputSystem?.Register(gameObject);
    }

    private void OnDisable()
    {
        InputSystem?.Unregister(gameObject);
    }
}

// Migrated
class SampleHandler : MonoBehaviour, IMixedRealitySourceStateHandler, IMixedRealityHandJointHandler
{
    private void OnEnable()
    {
        InputSystem?.RegisterHandler<IMixedRealitySourceStateHandler>(this);
        InputSystem?.RegisterHandler<IMixedRealityHandJointHandler>(this);
    }

    private void OnDisable()
    {
        InputSystem?.UnregisterHandler<IMixedRealitySourceStateHandler>(this);
        InputSystem?.UnregisterHandler<IMixedRealityHandJointHandler>(this);
    }
}
// Old
class SampleHandler2 : InputSystemGlobalListener, IMixedRealitySpeechHandler
{
}

// Migrated
class SampleHandler2 : InputSystemGlobalHandlerListener, IMixedRealitySpeechHandler
{
    private void RegisterHandlers()
    {
        InputSystem?.RegisterHandler<IMixedRealitySpeechHandler>(this);
    }

    private void UnregisterHandlers()
    {
        InputSystem?.UnregisterHandler<IMixedRealitySpeechHandler>(this);
    }
}

// Alternative migration
class SampleHandler2 : MonoBehaviour, IMixedRealitySpeechHandler
{
    private void OnEnable()
    {
        IMixedRealityInputSystem inputSystem;
        if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
        {
            inputSystem?.RegisterHandler<IMixedRealitySpeechHandler>(this);
        }
    }

    private void OnDisable()
    {
        IMixedRealityInputSystem inputSystem;
        if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
        {
            inputSystem?.UnregisterHandler<IMixedRealitySpeechHandler>(this);
        }
    }
}

空间感知

如下所述,IMixedRealitySpatialAwarenessSystem 和 IMixedRealitySpatialAwarenessObserver 接口发生了多项中断性变更。

更改

以下方法已重命名,以更好地描述其用法。

  • IMixedRealitySpatialAwarenessSystem.CreateSpatialObjectParent 已重命名为 IMixedRealitySpatialAwarenessSystem.CreateSpatialAwarenessObservationParent 以阐明其用法。

新增内容

根据客户反馈,新增了对以下功能的支持:轻松删除先前观察到的空间感知数据。

  • IMixedRealitySpatialAwarenessSystem.ClearObservations()
  • IMixedRealitySpatialAwarenessSystem.ClearObservations<T>(string name)
  • IMixedRealitySpatialAwarenessObserver.ClearObservations()

求解器

某些求解器组件和 SolverHandler 管理器类已更改,以修复各种错误并提供更直观的用法。

SolverHandler

  • 类不再从 ControllerFinder 扩展
  • TrackedObjectToReference 公共属性已弃用,并已重命名为 TrackedTargetType
  • TrackedObjectType 弃用了左右控制器值。 请改用 MotionControllerHandJoint 值,并更新新的 TrackedHandedness 属性以将跟踪限制为左或右控制器

InBetween

  • TrackedObjectForSecondTransform 公共属性已弃用,并已重命名为 SecondTrackedObjectType
  • AttachSecondTransformToNewTrackedObject() 已删除。 若要更新求解器,请修改公共属性(即 SecondTrackedObjectType

SurfaceMagnetism

  • MaxDistance 公共属性已弃用,并已重命名为 MaxRaycastDistance
  • CloseDistance 公共属性已弃用,并已重命名为 ClosestDistance
  • RaycastDirectionMode 的默认值现在是 TrackedTargetForward,在跟踪目标方向上的光线投射向前变换
  • OrientationMode 枚举值 VerticalFull 已分别重命名为 TrackedTargetSurfaceNormal
  • 添加了 KeepOrientationVertical 公共属性,以控制关联 GameObject 的方向是否保持垂直

Buttons

  • PressableButton 现在将 DistanceSpaceMode 属性默认设置为 Local。 这样,按钮就可以缩放并且仍可按下

剪裁球体

ClippingSphere 接口已更改以镜像在 ClippingBox 和 ClippingPlane 中找到的 API。

现在将根据变换比例隐式计算 ClippingSphere 的 Radius 属性。 开发人员必须在检查器中指定 ClippingSphere 的半径。 如果要更改半径,只需像往常一样更新变换的变换比例即可。

NearInteractionTouchable 和 PokePointer

  • NearInteractionTouchable 不再处理 Unity UI 画布触摸。 现在,必须将 NearInteractionTouchableUnityUI 类用于 Unity UI 可触摸对象。
  • ColliderNearInteractionTouchable 是基于碰撞体的可触摸对象的新基类,即除了 NearInteractionTouchableUnityUI 之外的所有可触摸对象。
  • BaseNearInteractionTouchable.DistFront 已被移动并重命名为 PokePointer.TouchableDistance。这是 PokePointer 可以与可触摸对象进行交互的距离。 之前,每个可触摸都有其自己的最大交互距离,但现在这是在 PokePointer 中定义的,它可以更好地进行优化。
  • BaseNearInteractionTouchable.DistBack 已重命名为 PokeThreshold。这清楚地表明 PokeThreshold 与 DebounceThreshold 是对应关系。 超过 PokeThreshold 时,可触摸对象将会激活;在超过 DebounceThreshold 时,可触摸对象将会释放。

ReadOnlyAttribute

已将 Microsoft.MixedReality.Toolkit 命名空间添加到 ReadOnlyAttributeBeginReadOnlyGroupAttributeEndReadOnlyGroupAttribute

PointerClickHandler

PointerClickHandler 类已弃用。 应改用 PointerHandler,它提供相同的功能。

HoloLens 遥控器支持

HoloLens 遥控器的控制器映射已从非手动 WindowsMixedRealityController 更改为非手动 WindowsMixedRealityGGVHand。 考虑到这一点,自动更新程序将在你第一次打开 ControllerMapping 配置文件时运行。 升级到 2.0.0 后,请至少打开任何自定义配置文件一次才能触发一次性迁移步骤。

InteractableHighlight

InteractableHighlight 类已弃用。 应改用 InteractableOnFocus 类和 FocusInteractableStates 资产。 若要为 InteractableOnFocus 创建新的 Theme 资产,请在项目窗口单击右键,然后选择“创建”>“混合现实工具包”>“可交互对象”>“主题”

HandInteractionPanZoom

由于 HandInteractionPanZoom 不是输入组件,因此已移至 UI 命名空间。 HandPanEventData 已移入此命名空间,并已简化以与其他 UI 事件数据对应。

2.0.0 中的程序集名称更改

在 2.0.0 版本中,所有官方混合现实工具包程序集名称及其关联的程序集定义 (.asmdef) 文件都已更新以适应以下模式。

Microsoft.MixedReality.Toolkit[.<name>]

在某些情况下,已合并多个程序集以更好地统一其内容。 如果你的项目使用自定义 .asmdef 文件,这些文件可能需要更新。

下表描述了 RC2 .asmdef 文件名如何映射到 2.0.0 版本。 所有程序集名称都与 .asmdef 文件名匹配。

MixedRealityToolkit

RC2 2.0.0
MixedRealityToolkit.asmdef Microsoft.MixedReality.Toolkit.asmdef
MixedRealityToolkit.Core.BuildAndDeploy.asmdef Microsoft.MixedReality.Toolkit.Editor.BuildAndDeploy.asmdef
MixedRealityToolkit.Core.Definitions.Utilities.Editor.asmdef 已删除,请使用 Microsoft.MixedReality.Toolkit.Editor.Utilities.asmdef
MixedRealityToolkit.Core.Extensions.EditorClassExtensions.asmdef Microsoft.MixedReality.Toolkit.Editor.ClassExtensions.asmdef
MixedRealityToolkit.Core.Inspectors.asmdef Microsoft.MixedReality.Toolkit.Editor.Inspectors.asmdef
MixedRealityToolkit.Core.Inspectors.ServiceInspectors.asmdef Microsoft.MixedReality.Toolkit.Editor.ServiceInspectors.asmdef
MixedRealityToolkit.Core.UtilitiesAsync.asmdef Microsoft.MixedReality.Toolkit.Async.asmdef
MixedRealityToolkit.Core.Utilities.Editor.asmdef Microsoft.MixedReality.Toolkit.Editor.Utilities.asmdef
MixedRealityToolkit.Utilities.Gltf.asmdef Microsoft.MixedReality.Toolkit.Gltf.asmdef
MixedRealityToolkit.Utilities.Gltf.Importers.asmdef Microsoft.MixedReality.Toolkit.Gltf.Importers.asmdef

MixedRealityToolkit.Providers

RC2 2.0.0
MixedRealityToolkit.Providers.OpenVR.asmdef Microsoft.MixedReality.Toolkit.Providers.OpenVR.asmdef
MixedRealityToolkit.Providers.WindowsMixedReality.asmdef Microsoft.MixedReality.Toolkit.Providers.WindowsMixedReality.asmdef
MixedRealityToolkit.Providers.WindowsVoiceInput.asmdef Microsoft.MixedReality.Toolkit.Providers.WindowsVoiceInput.asmdef

MixedRealityToolkit.Services

RC2 2.0.0
MixedRealityToolkit.Services.BoundarySystem.asmdef Microsoft.MixedReality.Toolkit.Services.BoundarySystem.asmdef
MixedRealityToolkit.Services.CameraSystem.asmdef Microsoft.MixedReality.Toolkit.Services.CameraSystem.asmdef
MixedRealityToolkit.Services.DiagnosticsSystem.asmdef Microsoft.MixedReality.Toolkit.Services.DiagnosticsSystem.asmdef
MixedRealityToolkit.Services.InputSimulation.asmdef Microsoft.MixedReality.Toolkit.Services.InputSimulation.asmdef
MixedRealityToolkit.Services.InputSimulation.Editor.asmdef Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor.asmdef
MixedRealityToolkit.Services.InputSystem.asmdef Microsoft.MixedReality.Toolkit.Services.InputSystem.asmdef
MixedRealityToolkit.Services.Inspectors.asmdef Microsoft.MixedReality.Toolkit.Services.InputSystem.Editor.asmdef
MixedRealityToolkit.Services.SceneSystem.asmdef Microsoft.MixedReality.Toolkit.Services.SceneSystem.asmdef
MixedRealityToolkit.Services.SpatialAwarenessSystem.asmdef Microsoft.MixedReality.Toolkit.Services.SpatialAwarenessSystem.asmdef
MixedRealityToolkit.Services.TeleportSystem.asmdef Microsoft.MixedReality.Toolkit.Services.TeleportSystem.asmdef

MixedRealityToolkit.SDK

RC2 2.0.0
MixedRealityToolkit.SDK.asmdef Microsoft.MixedReality.Toolkit.SDK.asmdef
MixedRealityToolkit.SDK.Inspectors.asmdef Microsoft.MixedReality.Toolkit.SDK.Inspectors.asmdef

MixedRealityToolkit.Examples

RC2 2.0.0
MixedRealityToolkit.Examples.asmdef Microsoft.MixedReality.Toolkit.Examples.asmdef
MixedRealityToolkit.Examples.Demos.Gltf.asmdef Microsoft.MixedReality.Toolkit.Demos.Gltf.asmdef
MixedRealityToolkit.Examples.Demos.StandardShader.Inspectors.asmdef Microsoft.MixedReality.Toolkit.Demos.StandardShader.Inspectors.asmdef
MixedRealityToolkit.Examples.Demos.Utilities.InspectorFields.asmdef Microsoft.MixedReality.Toolkit.Demos.InspectorFields.asmdef
MixedRealityToolkit.Examples.Demos.Utilities.InspectorFields.Inspectors.asmdef Microsoft.MixedReality.Toolkit.Demos.InspectorFields.Inspectors.asmdef
MixedRealityToolkit.Examples.Demos.UX.Interactables.asmdef Microsoft.MixedReality.Toolkit.Demos.UX.Interactables.asmdef