SteamVR-线性驱动和环形驱动(LinearDrive、CircularDrive)

LinearDrive和CircularDrive是两种用于控制物体运动和输出数值到LinearMapping的机制。它们常用于交互式场景,如通过把手操作影响其他物体的位置、动画或声音。LinearDrive在两点之间线性移动,而CircularDrive则围绕轴心旋转。LinearMapping接收这两个驱动的输出,提供0-1之间的值来改变其他属性。文章提到了如何设置和使用这两个驱动,以及它们的相关属性,例如旋转限制和摩擦系数。此外,还介绍了如何通过LinearAnimator控制动画播放。
摘要由CSDN通过智能技术生成
Linear Drive 线性驱动
在实际中,比如一个把手,在一定范围内拖动,从而影响到另一个物体(比如动画或位置等属性的变化)。
Circular Drive 环形驱动
类似线性驱动的效果,只是说Circular Drive是通过饶一个轴来拖动。
LinearDive和CircularDive一方面实现物体按照设定方式进行运动,另一方面输出数值到LinearMapping。
LinearMapping提供0-1之间的数值,用以改变其他物体的属性,比如位置、时间等。
LinearDive用法:
第一步:在场景中,新建一个sphere,然后给这个Object添加LinearDive脚本。
第二步:在场景中设置起始点和结束点,使得刚才的sphere在这两点之间。
第三步:添加一个空物体,添加脚本LinearMapping,然后把这个物体赋值给LinearDive属性中的LinearMapping。

LinearDive的属性:

起始点和结束点是为把手设定一个运动范围,必须在这两点之间移动。
StartPosition // 起始点
EndPosttion // 结束点  
LinearMapping //是这个把手对外输出值的承载对象。
这个值是把手相对于从起始点到结束点位置的一个百分比。
Reposition GameObject  // 选中表示手柄在操作过程中可以重定位(就是这个把手可操作),否则把手就不能重定位。但是不论是否选中,都会对外输出一个值到LinearMapping。
Maintain Momemntum // 是否启动摩擦  ,增加用户体验
Momemtum Dampen Rate  //摩擦系数值,数值越大摩檫力越大,阻尼效果越明显
可以通过Linear Mapping的Value去影响其他组件,比如控制动画、声音进度等。
在InteractionSystem中,有提供了几个设定好的脚本:LinearAnimator、LinearAnimation、LinearAudioPitch、LinearBlendshape等。
例:
LinearAnimator控制动画播放
第一步:在场景中添加空物体,然后添加脚本LinearAnimator
第二步:场景中,添加一个带有Animator脚本的动画
第三步:把上面Linear Dive输出的LinearMapping赋值给LinearAnimator。
第四步:把动画赋值给LinearAnimator。

LinearAnimator属性
LinearMapping // 影响动画的LinearMapping
Animtor // 受控制的动画
小总结:
 

其实查看LinearAnimator的源码,可以看出是通过LinearMapping的Value来实现对动画的控制,所以我们在开发当中,我们可以使用自己的方法来通过LinearMapping的Value来实现想要的功能。
Circular Drive属性

Axis of Rotation  // 设置绕着哪个轴旋转 x、y、z
Child Collider  // 如果设置,就可以通过该子物体来进行旋转,这个ChildCollider类似门的门把手。
Linearmapping // 是这个把手对外输出值的承载对象。
Hover Lock  //手柄从操作的Collider移出离后,是否继续执行旋转操作。 
Limited Rotation  // 旋转范围限制
Limited  // 是否被限制 ,如果不勾选就可以无限制的旋转。
Frozen Distance Min Max Threshold // 锁定数值的设置,跟后面的设置有关(距离最大值和最小值在这个设定范围时,表示到达最大、小角度完成)。
OnFrozenDistanceThreshold()
Limited Rotation Min  // 设置最小角度
MinAngle // 最小角度
Freeze On Min   // 当到达最小角度时是否锁定
OnMinAngle()  // 到达最小角度时事件触发
Limited Rotation Max // 设置最大角度
MaxAngle  // 最大角度
Freeze On Max   // 当到达最大角度时是否锁定
OnMaxAngle() // 到达最大角度时事件触发
ForceStart // 角度初始化,根据上面角度设置,设定一个初始角度,范围值[最小,最大]的闭区间。
StartAngle // 起始角度
Rotate GameObject // 该物体是否可以被旋转,默认是可以旋转的,大勾就不能旋转了,但是可以输出一个LinearMapping值。
Out Angle  // 输出角度
Circular Drive用法

第一步:新建一个cube,调整为一个扁平的形状,然后给它添加一个Circular Drive脚本。
第二步:设置一个把手,新建一个sphere,调整大小,放在cube的一角,并把它作为cube的子物体。
第三步:新建一个empty,然后给它添加LinearMapping脚本。
第四步:设定旋转轴,找到垂直于cube平面的轴,设置AxisOfRotation。
第五步:将刚才的把手赋值给Circular Drive的Child Collider。
第六步:将添加了Linear Mapping脚本的物体赋值给Circular Drive的LinearMapping。
接下来就可以运行看效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GarFe-Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值