点击以放置 - MRTK3

“点击以放置”是用于将游戏对象放置在用户周围环境的场景重建 (SR) 网格的表面上的求解器。 “点击以放置”使用两个选择和头部运动的组合来放置对象。 可以使用单个选择开始放置,使用头部移动来控制对象的位置,并使用另一个选择操作将对象置于场景中。

如何使用

  1. 设置场景。

    • 新建全新的 Unity 场景。
    • 将立方体添加到场景中,将刻度更改为 0.2,并将位置更改为 (0, 0, 0.7)。
  2. 将点击以放置附加到具有碰撞器的游戏对象。

    • 添加“点击以放置”组件时,还会附加“求解器处理程序”。 “点击以放置”将派生自需要求解器处理程序的求解器类。 “点击以放置”对象的位置是相对于求解器处理程序中的 TrackedTargetType 计算出来的。 默认情况下,头部为 TrackedTargetType,即当头部移动时,选择的对象也会跟随移动。 TrackedTargetType 还可以设置为控制器射线,该射线会让对象跟随控制器。 点击以放置检查器中的第一组属性是常见的求解器属性

    重要

    点击以放置独立的求解器,不能与其他求解器链接在一起。 它无法链接的原因是,在放置对象时,会使用 SolverHandler.UpdateSolvers 更新对象位置。

    • 点击以放置属性:
      • Auto Start:如果为 true,则点击以放置求解器将开始控制要放置的游戏对象的位置。 对象将立即开始跟随 TrackedTargetType(头部或控制器射线)。 该值必须在调用 Start() 之前修改才能生效。
      • Default Placement Distance:对象相对于 SolverHandler 中的 TrackedTargetType 放置的默认距离(以米为单位)。 如果表面没有被光线投射击中,则游戏对象放置在默认放置距离。
      • Max Raycast Distance:基于“TrackedTargetType”原点的光线投射的最大距离(米)。 此光线投射查找要放置选定对象的表面。
      • UseDefaultSurfaceNormalOffset:默认情况下,该属性设置为 True。 它确保所放置的对象在表面上对齐。 如果此属性为 true,则将应用默认的表面法线偏移,而不是为 SurfaceNormalOffset 属性指定的任何值。 如果为 false,则将应用 SurfaceNormalOffset 的值。 默认的表面法线偏移是沿 z 轴的碰撞区范围。
      • Surface Normal Offset:当光线投射击中表面时,要放置的游戏对象的中心与表面法线之间的距离。 仅当 UseDefaultSurfaceNormalOffset 为 false 时,此属性才会应用于对象。
      • Keep Orientation Vertical:如果为 true,则要放置的游戏对象将保持直立,并与 Vector3.up 平齐。
      • Rotate According to Surface:如果为 false,则要放置的游戏对象将不会根据表面击中更改其旋转。 当 IsBeingPlaced 为 true 时,对象将面向相机。
      • Magnetic Surfaces:要按最高到最低优先级的顺序执行的 LayerMasks 数组。 用于提供光线投射击中的第一层掩码用于位置计算。
      • Debug Enabled:如果为 true,并且在 Unity 编辑器中,则将以黄色绘制光线投射的法线。 如果 RotateAccordingToSurface 为 true,则启用调试非常有用,因为它会绘制表面击中的法线,这会直观地说明对象处于当前方向的原因。
      • On Placing Started:选择了要放置的游戏对象时,触发此事件一次。
      • On Placing Stopped:未选择要放置的游戏对象时,触发此事件一次。
  3. 在编辑器中测试“点击以放置”行为

    • 按“播放”并按住空格键以显示输入模拟手。
    • 移动手直到立方体获得焦点,并通过单击鼠标左键,模拟使用输入模拟手进行单击。
      • 如果场景中不存在碰撞器,则对象将按照定义的 Default Placement Distance 跟随 TrackedTargetType
    • 对象在被选中后跟随 TrackedTargetType 的运动。 若要在编辑器中模拟头部运动,请按 WASD 键。 单击并按住鼠标右键,改变头部旋转。
    • 若要停止放置对象,请再次单击。 对于停止放置单击,对象无需获得焦点。 只有在初次单击来启动放置过程时,才需要获得焦点。