前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)

Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)

作者头像
游戏开发小Y
发布2024-01-18 19:10:58
2330
发布2024-01-18 19:10:58
举报
文章被收录于专栏:Unity开发系列专栏

1.前言

  • 使用 ConstraintManager,可以将一组约束组件应用于转换。 默认情况下,约束管理器会自动收集所有附加的约束组件,并将它们应用到目标对象。 但是,用户也可以选择手动配置应用的约束列表,只允许使用附加约束的子集.
  • 目前,以下 MRTK UX 元素支持约束:
    • (BoundsControl)边界控制
    • (ObjectManipulator )对象操控器
  • 约束管理器可在两种模式下运行:
    • 自动约束选择
    • 手动约束选择

2.约束选择

2.1 自动约束选择
  • 默认的“Auto”模式将列出所有附加的约束组件。 可以使用“Go to component”按钮直接跳转到检查器中的组件,也可以从下拉列表中添加新约束。
2.2 手动约束选择
  • 如果将束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 首次启用手动模式时,管理器将使用所有当前附加的约束自动填充列表。

3.执行顺序

  • 每个约束的执行顺序可以在约束本身的“执行顺序”选项中定义。 该顺序将反映在约束管理器中显示的列表中。 当某些约束以不同的顺序组合时,它们的行为会有所不同,因此请记住每个约束的优先级,并相应地调整它们的顺序。

4.转换约束

  • 可以使用约束以某种方式限制操作。 例如,某些应用程序可能需要旋转,同时要求对象保持垂直。 在这种情况下,可以向对象添加 RotationAxisConstraint,并用于将旋转限制为 y 轴旋转。 MRTK 提供了许多约束,所有这些约束如下所述。
  • 也可以定义新约束,并使用它们创建某些应用程序可能需要的唯一操作行为。 为此,可以创建一个继承自 TransformConstraint 的脚本,并实现抽象的 ConstraintType 属性和抽象的 ApplyConstraint 方法。 新约束应显示在下拉列表中,并且应在添加到对象时自动在约束管理器中注册。
  • MRTK 提供的所有约束共享以下属性:
    • Hand Type 指定约束是用于单手操作、双手操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项:
      • (One Handed)单手:如果选择,约束将在单手操作期间使用。
      • (Two Handed)双手操作:如果选择,约束将在双手操作期间使用。
    • 手ProximityType 指定约束是用于近操作、远操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项:
      • (Near)近:如果选择,约束将在近操作期间使用。
      • (Far)远:如果选择,约束将在远操作期间使用。

5.约束类型

5.1 FaceUserConstraint
  • 此约束限制对象的旋转,以使其始终面向用户。 “Face Away”选项控制是使用正 Z 轴还是负 Z 轴。
5.2 FixedDistanceConstraint
  • 此约束固定了操作开始时被操作对象与另一个对象转换之间的距离。 这适用于诸如固定被操作对象与头部转换之间的距离等行为。 Constraint Transform字段默认为相机转换,是操作对象将具有固定距离的另一个转换。
5.3 MaintainApparentSizeConstraint
  • 当此约束被附加到对象时,无论对象与用户有多远,它都将保持与用户相同的表面大小(即它将占据用户视野的相同比例)。 这可用于确保在操作时盖板或面板仍然可读。
5.4 MoveAxisConstraint
  • 此约束可用于固定被操作对象沿哪个轴移动。 这可用于在平面表面或沿直线操作对象。 Constraion on Movement 字段指定要阻止移动的轴。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
5.5 MinMaxScaleConstraint
  • 此约束限制对象的缩放,这有助于防止用户将对象缩放到无法使用的大小。 它适用于基于句柄的缩放(使用 BoundsControl)和通过双手操作的直接缩放(使用 ObjectManipulator)。 Relative to Initial State选项定义特定的最小和最大缩放值是否为绝对值,或者它们是否与对象的初始缩放比例相乘。
5.6 RotationAxisConstraint
  • 此约束可用于固定被操作对象可沿哪个轴旋转。 这可用于使被操作对象保持垂直,但仍允许围绕 y 轴旋转,例如。Constraint On Rotation字段指定要阻止旋转的轴。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2.约束选择
    • 2.1 自动约束选择
      • 2.2 手动约束选择
      • 3.执行顺序
      • 4.转换约束
      • 5.约束类型
        • 5.1 FaceUserConstraint
          • 5.2 FixedDistanceConstraint
            • 5.3 MaintainApparentSizeConstraint
              • 5.4 MoveAxisConstraint
                • 5.5 MinMaxScaleConstraint
                  • 5.6 RotationAxisConstraint
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档