求解器是有助于根据预定义算法计算对象位置和方向的组件。 示例:将对象放置在与用户注视视线相交的表面。 求解器系统确定性地定义这些转换计算的运算顺序,因为没有可靠的方法向 Unity 指定组件的更新顺序。 求解器提供一系列行为,以将对象附加到其他对象或系统。 另一个示例是一个尾随对象,该对象悬停在用户前面(基于摄像机)。 求解器还可以附加到控制器和对象,使对象尾随控制器。 所有求解器都可以安全地堆叠,例如尾随行为加表面磁性加动量。
求解器类型 | 描述 |
---|---|
Orbital | 锁定到指定位置并偏离参照对象 |
ConstantViewSize | 应缩放以保持相对于参照对象视图不变的大小 |
RadialVie | 使对象保持在参照对象的视锥投射范围内。 |
ConstantViewSize | 应缩放以保持相对于参照对象视图不变的大小 |
Follow | 使对象保持在参照对象的一组用户定义边界内。 |
InBetween | 使对象保持在两个跟踪对象之间。 |
SurfaceMagnetism | 将射线投射到世界中的表面上,并使对象对齐到该表面。 |
DirectionalIndicator | 确定作为方向指示器的对象的位置和方向。 从 SolverHandler 跟踪目标的参照点来看,此指示器将面向提供的 DirectionalTarget。 |
Momentum | 应用加速/速度/摩擦来模拟由其他求解器/组件移动的对象的动量和弹性。 |
HandConstraint | 约束对象,使其在 GameObject 不会与手部交叉的区域跟随手部。 对手部约束的交互式内容(如菜单等)很有用。此求解器旨在与 XRNode 一起使用。 |
HandConstraintPalmUp: | 派生自 HandConstraint,但包含用于测试手部在激活前是否手掌面向用户的逻辑。 此求解器只能与 XRNode 控制器一起使用,如果与其他控制器类型一起使用,此求解器的行为类似于基类。 |
Overlap | 与跟踪的对象重叠。 |
public class InFront : Solver
{
public override void SolverUpdate()
{
if (SolverHandler != null && SolverHandler.TransformTarget != null)
{
var target = SolverHandler.TransformTarget;
GoalPosition = target.position + target.forward * 2.0f;
}
}
}
每个求解器组件都有一组核心属性,这些属性是相同的,用于控制求解器行为。 如果启用了“Smoothing”,则求解器将随着时间的推移,将 GameObject 的转换逐渐更新为计算值。 每个转换组件的“LerpTime”属性确定了此更改的速度。 例如,MoveLerpTime 值越高,帧之间的移动增量就会越慢。 如果启用了 MaintainScale,求解器将利用 GameObject 的默认局部缩放。