前言
Latch Component是只有在VR环境下才会使用到的组件,当用户想要设计一个交互物体:玩家将手柄移动到物体处按下抓握键/靠近物体时,玩家的手部模型会吸附到交互物体处并且改编手的模型。本文将通过制作一个可旋转交互的旋钮的案例来介绍使用Latch Component的基础设定以及结合Comp_Drag与Comp_Latch_Drag制作交互旋钮。
Latch组件基础参数
官方文档中Latch组件的基本参数如下图所示:
Can Be Latched Onto:
这个参数用于开关Latch Comp,可以根据用户设定在适当的时候开启与关闭Latch功能。
Max Attach Distance:
用户手柄能够触发吸附的最大距离。
Auto Attach:
该参数与上一个参数结合使用,若Auto Attach为True时,用户的手柄进入吸附范围后会自动吸附至交互物体上,若为False则需要用户手动按下抓握键才能够吸附在交互物体上。
Component Tag to Attach To:
这个参数需要填写手部模型需要吸附的模型的Tag名称,用户需要自行添加Tag至StaticMesh并在SM上添加手部模型吸附的Socket。
Allow Simulataneous Latching:
这决定了交互物体上是否允许多个用户/控制器进行吸附。
Minimum Detach Distance:
用户脱离的最小距离,当用户手柄移到范围外时手部模型将自动脱离交互物体。
模型调整
Latch组件是通过获取交互物体模型上的Socket位置与Socket Name来进行手部模型的贴合与样式的选择。因此在我们要使用Latch组件时需要对模型进行处理,在对应位置添加有命名规范的插槽。
根据官方的视频中的说明可知, 插槽的命名规范是:
第一段必须为L_或R_,代表了左手或右手。后面接00-14的数字,这数字代表模板中手部对应的15种不同的手势姿势。
例如下图中的旋钮模型,官方设定的插槽名称为L_02与R_02,这代表了Latch到旋钮时的手势应该是02号手势。
AttachPoint插槽也是必须要有的插槽,它必须要尽可能的靠近手部模型放置在物体上的位置。
VRA模板中自带的十五种不同的手势,用户可以按需自行配置SocketName进行手势的匹配
Drag组件基础参数
Drag组件在VRA中也是非常重要的组件,这一组件能够帮助创作者快速地开发能与用户进行仿物理交互的Actor。一般是通过Comp_Latch_Drag和Comp_Drag组合完成VR手拖动交互物体的功能。Drag组件中需要设定的参数比较多且复杂,下面为大家介绍最重要的一些参数:
DragType:
Drag Type参数决定了被拉拽的物体运动的形式与方向。官方文档的说明如下:
Linear Type:主要是在对应的轴上平移。
Angle Type:主要用与旋转类似方向盘,闸门的交互物体,可以在Yaw与Roll方向上的旋转。
Spline Type:能够使用spline自定义拖动的路线,灵活地设计交互物体的拖动路径。
Rotation Type:与Angle Type有所区别,只能在VR模式下进行拖动,一般用于制作旋钮的交互。
Drag Type中的参数细节:
Value Range:
这一参数决定了物体可拖动的范围,在这个事例中的Drag Type是Angle Yaw,此时ValueRange是0到720则表明该交互物体能够在Yaw角度上旋转的范围是0-720度。
Start Value:
这参数代表了交互物体的初始位置是多少,720代表着初始位置为720度。
Snap Type:
Snap Type规定了当用户拖动完物体,物体的释放后运动类型。
FreeMovement:该参数表明当用户放手后,物体会固定在放手时的状态不变。
SnapToSegment:该参数表明当用户放手后,物体会恢复到距离当前值最近的设定值。
Reset: 该参数表明当用户放手后,物体会恢复到被拖动前的状态。
SnappingSpeed:
该参数设定了用户释放物体后,物体Snap到某一值时运动的速度
Follow Speed:
该参数设定了交互物体跟随用户手柄运动的速度
InvertPercent:
该参数要根据用户使用的具体情况来调整,根据物体运动的方向不同,物体走过规定路径/角度的百分比值会变化,例如事例中旋转闸门,我们希望顺时针旋转时,percent的变化为0-1;在测试中顺时针旋转阀门实际上Percent的变化是1-0,此时我们就需要将InvertPercent参数勾选为true。
SectionSet:
该数组用于让用户自定义规定当前交互物体可以Snap到的部分有多少块,主要是结合Snap Type参数时使用的。
结合Comp_Drag与Comp_Latch_Drag
当两个组件都设定好了基本参数后,需要让这个两个组件建立起通信。建立通信的方法很简单
Comp_Drag的参数设定:
在Drag组件中,我们需要设定组件的Component Tags,并且将要控制的Mesh的Tag填入至Component Tag to Control参数栏中。
Latch_Drag的参数设定:
该组件中需要将刚刚设定的Comp_Drag组件的component tag填入至Drag Tag参数栏中,并且将要手部模型要吸附到的Mesh的Tag也填入至Component Tag to Attach To该参数栏中即可。
完成设置后的物体的结构
被拖动的交互Actor需要包含下图红框中所示的组件,注意被拖动的Mesh必须有一个基座Mesh,不然在交互时会报错。
根据上文中介绍的步骤完成组件的设置后即可实现对物体在固定点位进行拖拽、旋转的功能 。