“点击以放置”是用于将游戏对象放置在用户周围环境的场景重建 (SR) 网格的表面上的求解器。 “点击以放置”使用两个选择和头部运动的组合来放置对象。 可以使用单个选择开始放置,使用头部移动来控制对象的位置,并使用另一个选择操作将对象置于场景中。
如何使用
设置场景。
- 新建全新的 Unity 场景。
- 将立方体添加到场景中,将刻度更改为 0.2,并将位置更改为 (0, 0, 0.7)。
将点击以放置附加到具有碰撞器的游戏对象。
- 添加“点击以放置”组件时,还会附加“求解器处理程序”。 “点击以放置”将派生自需要求解器处理程序的求解器类。 “点击以放置”对象的位置是相对于求解器处理程序中的
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
:未选择要放置的游戏对象时,触发此事件一次。
- 添加“点击以放置”组件时,还会附加“求解器处理程序”。 “点击以放置”将派生自需要求解器处理程序的求解器类。 “点击以放置”对象的位置是相对于求解器处理程序中的
在编辑器中测试“点击以放置”行为
- 按“播放”并按住空格键以显示输入模拟手。
- 移动手直到立方体获得焦点,并通过单击鼠标左键,模拟使用输入模拟手进行单击。
- 如果场景中不存在碰撞器,则对象将按照定义的
Default Placement Distance
跟随TrackedTargetType
。
- 如果场景中不存在碰撞器,则对象将按照定义的
- 对象在被选中后跟随
TrackedTargetType
的运动。 若要在编辑器中模拟头部运动,请按 WASD 键。 单击并按住鼠标右键,改变头部旋转。 - 若要停止放置对象,请再次单击。 对于停止放置单击,对象无需获得焦点。 只有在初次单击来启动放置过程时,才需要获得焦点。