弹性系统 - MRTK2

Elastic System

MRTK 附带了一个弹性模拟系统,该系统包含各种可扩展的灵活子类,为四维四元数弹簧、三维量弹簧和简单线性弹簧系统提供绑定。

目前,支持弹性管理器的以下 MRTK 组件可利用弹性功能:

弹性管理器

Elastic System2

弹性管理器处理传递的转换,并将其馈送到弹性系统。

可以通过两个步骤来启用自定义组件的弹性:

  1. 在操作开始时调用 Initialize 方法,用当前主机转换来更新系统。
  2. 每次对更新的目标转换执行弹性计算时,都要查询 ApplyHostTransform。

请注意,操作结束后,将继续进行弹性模拟(通过弹性管理器更新循环)。 若要阻止此行为,可以将弹性自动更新 EnableElasticsUpdate 设置为 false。

默认情况下,弹性管理器组件在添加到游戏对象时,不会为任何转换类型启用弹性。 需要为特定的转换类型启用字段 Manipulation types using elastic feedback,以便为所选类型创建弹性配置和范围。

弹性配置

边界控制配置类似,弹性管理器附带一组配置对象,这些对象可存储为可编脚本的对象,并在不同的实例或预制件之间共享。 这些配置可以作为单独的可编写脚本的资产文件或预制件内嵌套的可编写脚本的资产进行共享和链接。 还可以直接在实例上定义其他配置,而无需链接到外部或嵌套的可编写脚本的资产。

弹性管理器检查器将通过在属性检查器中显示一条消息,来指示是共享某个配置还是将其内联为当前实例的一部分。 此外,共享实例无法直接在弹性管理器属性窗口中进行编辑,而是需要直接修改其链接到的资产,以避免共享配置发生任何意外更改。

弹性管理器为下列转换类型提供配置对象选项,其中每个都由弹性配置对象表示:

  • 平移弹性
  • 旋转弹性
  • 缩放弹性

弹性配置对象

弹性配置定义阻尼谐振荡器差动系统的属性。 以下属性可以进行调整,但在 MRTK 中已经有一组默认值:

  • Mass:模拟的振荡器元素的质量。
  • HandK:手部弹簧常数。
  • EndK:后盖弹簧常数。
  • SnapK:对齐点弹簧常数。
  • Drag:牵引/阻尼系数,与速度成正比。

弹性范围

弹性范围设置因操作类型而异。 平移和缩放用体积弹性范围表示,旋转用四元数弹性范围表示。

体积弹性范围

体积范围定义了一个三维空间,阻尼谐振荡器可以在其中自由运动。

Elastic Volume Stretch Bounds

  • StretchBounds:表示弹性空间的下边界。
  • UseBounds:系统是否要遵循拉伸边界。 如果需要遵循,则当目标位置的当前迭代超出延伸边界时,将应用终止力。
  • SnapPoints:指向系统在空间中要对齐到的点。
  • RepeatSnapPoints:重复对齐点,直到无限大。 现有的对齐点将充当一个模数,其中实际的对齐点映射到每个对齐点的最接近的整数倍数。
  • SnapRadius:对齐点开始对弹簧施力时的距离。

Elastic Volume Snap Grid

四元数弹性范围

四元数范围定义了一个四维旋转空间,阻尼谐振荡器可以在其中自由旋转。

Elastic Rotation Example

  • SnapPoints:系统将对齐到的欧拉角。
  • RepeatSnapPoints:重复对齐点。 现有的对齐点将充当一个模数,其中实际的对齐点映射到每个对齐点的最接近的整数倍数。
  • SnapRadius:对齐点开始对弹簧施力时的弧角,以欧拉角度表示。

弹性示例场景

可以在 ElasticSystemExample 场景中找到弹性配置的示例。

Elastics Example Scene