VRTK脚本解析

(一)VRTK_ SimplePointer(直线简单激光指针)

VRTK脚本解析_第1张图片
Paste_Image.png
下面是可用脚本参数:
*** ∙ Enable Teleport(启用传送): 如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。
*** ∙ Point Hit Color(指针碰撞颜色):
当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。
*** ∙ Pointer Miss Color(指针无碰撞颜色): 当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。
*** ∙ Show Play Area Cursor(显示游玩区光标):
如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。
*** ∙ Play Area Cursor Dimensions(游玩去光标尺寸): 决定游玩区光标和碰撞的尺寸。如果值为零,PlayArea Cursor 的尺寸将根据Play Area空间进行校正。
∙ Handle Play Area Cursor Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer Miss Color的颜色且WorldPointerDestinationSet 事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。
*** ∙ Beam Always On(光束总是开启):
如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。
*** ∙ Pointer Thickness(指针光束厚度): 光束长宽也可以在脚本里设置以及能够开关显示在光柱最后的球形光柱顶端(表示光标)。
*** ∙ Pointer Length(指针光束长度):
在停止前光束投射的距离。
*** ∙ Show Pointer Tip(显示指针顶端):***切换是否光标显示在光束指针的尾部。

(二)VRTK_ControllerEvents(控制器事件)

当一个控制器按钮被按下,脚本发出一个事件表明按钮被按下了,这使得其他脚本去监听这个事件而不需要实现任何控制器逻辑。脚本也有一个公共的布尔类型的按下状态变量,允许被其他脚本查询按钮是否被按下。当一个控制器按钮被释放,脚本也发送一个事件表示按钮被释放了。控制器触摸板有两个状态,既可以用户只把手指放到压力传感板上来触摸,也可以用户在板上按下去直到发出声响来点击。控制器事件脚本同时分别处理触摸板触摸和点击事件。
控制器上有两个按钮轴:

*** · 触摸板触摸位置,位置的x和y值基于触摸板当前被触摸位置。
· 扳机按钮,有个基于扳机键被按下去程度的x值。***

当触摸板的轴或者扳机键的轴值改变时,会有两个额外的事件发出,这可以被用来确定两个轴的变化来进行精确控制,如用触摸板来移动角色,或者知道扳机键被按下程度。
触摸板的轴由变量TouchpadAxis 记录,在所有控制器事件的脚本中更新。
扳机键的轴由变量buttonPressure 记录,在所有控制事件脚本中更新。
任何其他按钮按压只记录一个为1或者0按钮压力,因为所有其他按钮都是数字量(要么就是点击要么就没有),但扳机是一个可以记录不同按钮压力的模拟量。
轴值变化的精确度可以由脚本中的axisFidelity 参数来决定,默认值为1。
值只要超过2就可能会产生灵敏过度的结果。

(三)VRTK_BezierPointer(贝塞尔曲线激光指针)

VRTK脚本解析_第2张图片
Paste_Image.png

可用脚本参数如下:
*** Enable Teleport(启用传送): 如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。
*** Point Hit Color(指针碰撞颜色):
当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。
Pointer Miss Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。
*** Show Play Area Cursor(显示游玩区光标): 如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。
*** Play Area Cursor Dimensions(游玩去光标尺寸):
决定游玩区光标和碰撞的尺寸。如果值为零,PlayArea Cursor 的尺寸将根据Play Area空间进行校正。
*** Handle Play Area Cursor Collisions(处理游玩区光标碰撞):***如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer Miss Color的颜色且WorldPointerDestinationSet 事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。
Beam Always On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。
Activate Delay(激活间隔):能够再次激活指针光束的延迟时间秒数。用来防止持续传送。
Pointer Length(指针光束长度):在停止前光束投射的距离。
Pointer Density(指针密度):贝塞尔曲线光束渲染的物体个数。这里数值太高将很可能会因为大量渲染对象来对游戏性能有负面影响。
Show Pointer Cursor(显示指针光标):在光束终点位置的地面显示光标。用来看光束终点位置的高度很有用,它可以通过切换这个来关闭。
Pointer Cursor Radius(指针光标半径):地面指针光标的尺寸,这个值也会影响贝塞尔曲线光束里的对象的尺寸。半径越大,对象尺寸越大。
Beam Curve Offset(光束曲线偏移): 投射光束时应用的高度偏移量,就算在光束径直指向时也能产生一个光滑的曲线。
*** Custom Pointer Tracer(自定义指针轨迹): ***可以在这里设置一个自定义的游戏对象用来代替光束轨迹的默认球体。自定义游戏对象将和控制器的旋转想匹配。
Custom Pointer Cursor(自定义指针光标): 可以在这里设置一个自定义的游戏对象用来代替指针光标的默认平柱体。

(四)VRTK_BasicTeleport(基础传送器)

VRTK脚本解析_第3张图片
Paste_Image.png

基础传送器更新[CameraRig]在游戏世界中的x和z位置到由WorldPointerDestinationSet事件设置定位的世界指针顶端的位置。

∙ Blink Transition Speed(眨眼淡入淡出速度):可以在基础传送脚本中改变眨眼渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨眼特效呈现。渐变通过 SteamVR Unity 插件脚本里的SteamVR_Fade.cs脚本实现。
*** ∙ Distance Blink Delay(距离眨眼延时):*** 范围从0到32,这个值决定了基于被传送距离的眨眼过渡保持黑屏的时长。值为0时,任何传送距离都不会延长传送的眨眼过渡,值为32时,就算距离初始点很近的被传送距离都会延长传送的眨眼过渡。这可以被用来模拟用户传送更远的距离花费更长时间。值为16对用户来说就刚好。
*** ∙ Headset Position Compensation(头盔位置补偿): 如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。
*** ∙ Ignore Target With Tag Or Class(忽略带有标签或脚本的目标):
一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。

(五)VRTK_HeightAdjustTeleport(可调节高度的传送器)

VRTK脚本解析_第4张图片
Paste_Image.png

高度调整传送器继承自基础传送器,它允许根据传送位置是否在其他对象顶部来让[CameraRig]改变y位置。
和基础传送器一样,高度调整传送器被添加到[CameraRig]预制并需要一个可用的世界指针。

可用脚本参数如下:

Blink Transition Speed(眨眼淡入淡出速度):可以在基础传送脚本中改变眨眼渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨眼特效呈现。渐变通过 SteamVR Unity 插件脚本里的SteamVR_Fade.cs脚本实现。
*** · Distance Blink Delay(距离眨眼延时): ***范围从0到32,这个值决定了基于被传送距离的眨眼过渡保持黑屏的时长。值为0时,任何传送距离都不会延长传送的眨眼过渡,值为32时,就算距离初始点很近的被传送距离都会延长传送的眨眼过渡。这可以被用来模拟用户传送更远的距离花费更长时间。值为16对用户来说就刚好。
*** · Headset Position Compensation(头盔位置补偿): ***如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。
***· Ignore Target With Tag Or Class(忽略带有标签或脚本的目标) : ***一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。
· Play Space Falling(游玩区坠落):检查是否玩家是否走出对象,即所在游玩区的位置不在对象上,然后就会自动传送到最近的地面上。

(六)VRTK_HeadsetCollisionFade(头盔碰撞淡出)

头盔碰撞淡出的目的是为了检测用户的VR头盔何时碰撞到其他游戏对象并淡出屏幕到一个单色。
这是为了处理玩家把头放进一个游戏对象里看到对象内部的裁剪,这不是我们所期望的。
之所以这么做,是因为如果玩家把头放到不该放的地方就会淡出到一个颜色(如黑色),这就让玩家意识到他们做错了什么,然后可能自然的就会后退。如果头盔正在碰撞,那么传送行为就被禁用来防止穿插穿墙的作弊。

头盔碰撞淡出脚本添加到[CameraRig] 预制下的Camera (head)里的Camera(eye)对象上。

VRTK脚本解析_第5张图片
Paste_Image.png

可用脚本参数如下:

· Blink Transition Speed(眨眼淡入淡出速度):碰撞时淡入淡出速度。
· Fade Color(淡出颜色):头盔碰撞时淡出颜色。发出事件如下:
*** · HeadsetCollisionDetect: 当用户头盔碰到其他游戏对象时发出。
*** · HeadsetCollisionEnded:
当用户头盔停止碰撞游戏对象时发出。发出事件的有效载体内容包括:
*** · collider:*** 头盔所碰撞的游戏对象的碰撞器。
*** · currentTransform:*** 当前头盔碰撞淡入淡出脚本所添加到的对象(相机)的Transform。

(七)VRTK_PlayerPresence(玩家呈现)

VR用户在游戏呈现中有身体这一概念,它通过在用户站立在游玩区中的位置添加碰撞和刚体来实现。
身体的碰撞和刚体将防止用户能狗穿过墙壁或者和其他可碰撞对象穿插。
碰撞体的高度由用户头盔所在高度决定,如果用户下蹲,碰撞体同样收缩,这意味着可能在低的空间去下蹲和爬行通过。

VRTK脚本解析_第6张图片
Paste_Image.png

· Headset Y Offset(头盔y偏移):为用户创建的盒型碰撞体的高度由用户头盔位置设置。如果需要碰撞体小一点来让游玩区和头盔之间留有空间的话,这个值将降低生成的盒型碰撞体的高度。
*** · Ignore Grabbed Collisions(忽略抓取碰撞):***如果勾选,任何被控制器抓取的物品都不会和游玩区的盒碰撞体及刚体发生碰撞。这在用户需要抓取和挥动对象时是很有用的,因为如果碰撞体激活,这些抓取的东西就会被游玩区的碰撞体弹开。

(八)VRTK_TouchpadWalking(触摸板移动)

TouchpadWalking脚本用在[CameraRig]预制上,并且在用户位置添加一个刚体和盒型碰撞来防止他们穿过其他带碰撞的游戏对象。

VRTK脚本解析_第7张图片
Paste_Image.png
可用脚本参数如下:

*** · Left Controller:如果勾选,左控制器的触摸板就能移动游玩区。在运行时可以被切换。
*** · Right Controller:
如果勾选,右控制器的触摸板就能移动游玩区。在运行时可以被切换。
*** · Max Walk Speed:当触摸板被触摸到轴的极限时游玩区所能达到的最大移动速度。触摸板距离中心越近的位置被触摸,移动速度就越慢。
*** · Deceleration(减速度):
当用户不再触摸到触摸板时游玩区从减速到完全停止的速度。这种减速度效果可以减缓可能遭受的移动恶心。

(九)VRTK_RoomExtender(游玩区空间扩展)

这个脚本允许游玩区跟随玩家移动。
CameraRig只在达到定义的圈的边缘才会移动。目的是为了创造一个虚拟的更大的游玩区。
测试这个脚本的demo场景为028_CameraRig_RoomExtender。把脚本添加到CameraRig来使用。


VRTK脚本解析_第8张图片
Paste_Image.png
可用脚本参数如下:

*** Additional Movement Multiplier(额外移动乘数): ***圈边缘的移动放大因数。0就是不移动CameraRig。值越高模拟的游玩区域就越大,但是也可能就越不令人舒适。

*** Head Zone Radius(头部空间半径):***游玩区不会发生移动的圆圈尺寸,一切都正常的。如果值太低,在蹲下时就会感到不舒服。
***Debug Transform(调试Transform): ***这个transform让玩家周围的CameraRig不移动圆圈显示出来。在demo场景里就是一个在地板上的柱体。记得关闭碰撞。

(十)VRTK_InteractableObject(可交互对象)

可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上。

VRTK脚本解析_第9张图片
Paste_Image.png

Touch Interactions 触摸交互
∙HighlightOnTouch:如果勾选,这个对象在控制器触摸它时就会高亮。
∙TouchHighlightColor:对象被触摸时高亮的颜色。颜色可以被任何全局的设置颜色来覆写(例如InteractTouch脚本)。
∙RumbleOnTouch:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。

Grab Interactions 抓握交互

∙IsGrabbale:决定对象是否能被抓握。
∙IsDroppable:决定对象在被控制器抓握后能否被放下。如果没有勾选,一旦用控制器按钮拾起了物品就不能放下了。但是如果抓握的机制是关节(Fixed_Joint)的话,当对象受力足够大之后关节断开,物品也就被放下了。所以最好使用控制器子物体的抓握机制(Child_Of_Controller)来防止这种情况。
∙HoldButtonToGrab:如果勾选,控制器就需要持续按住设置为抓握的按钮来保持抓握状态。如果没有勾选,抓握的按钮切换抓握行为通过按下一次抓取,再按一次释放。
∙OnGrabCollisionDelay:当对象被第一次抓取时延迟碰撞的作用的时间量。这在防止游戏对象被抓取时卡到另外一个物体时很有用。
∙GrabSnapType(抓取对齐方式):这个设置了当对象被抓取时的对齐方式
Sinmple_Snap:把抓取的对象的中心位置放到控制器的附加点上(默认是控制器的tip)
Rotation_Snap:调整抓取的对象到一个指定旋转,由Vector3类型的SnapToRotation变量提供。
Precision_Snap:没有把对象的位置对齐到控制器,而是用控制器触摸对象时的点来拾起对象(就像真实生活中用手拿起东西一样)。
Handle_Snap:允许一个空的GameObject作为可交互对象的子物体来用作参考对齐点。抓取时,空GameObject的旋转和位置用来定位抓取的可交互物体到控制器。
∙SnapToRotation:表示欧拉角的Vector3变量,决定在对齐时相对于控制器的对象的旋转。在拾取枪或剑的时候很有用,对控制器的相对旋转对便于使用是很重要的。
∙SnapToPosition:一个Vector3变量,决定对象对齐控制器时的相对位置。
∙SnapHanlde:一个由空游戏对象提供的Transform,它必须是被抓取物品的子物体并用作一个被拾取物品相对于进行抓取的控制器的旋转和位置的定位点。
∙RumbleOnGrab:控制器抓取对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。

Grab Mechanics 抓握机制

∙GrabAttachType:这决定了抓取的物品在被抓取时怎样被添加到控制器上。
FixedJoint(固定关节):用一个固定的关节把对象附加到控制器上,意味着附加对象以完全1:1的方式追踪控制器的位置和旋转。
springJoint(弹性关节):用一个弹性关节把对象添加到控制器上,意味着物体和控制器之间有一些弹性,弹力驱动物体。在想要牵引一个物体而不是直接把物体对齐到控制器上是很有效的。就感觉物体有运动阻力一般。
TrackObject(追踪对象):不是通过关节来把对象附加到控制器上,而是确保对象追踪控制器的方向,这适用于铰链式关节。
***ChildOfController(控制器子物体):****简单地让对象成为抓取控制器的子物体,所以自然地追踪了控制器运动位置。
∙DetachThreshold(分离阈值):当对象从被抓取的控制器分离时的力值。如果控制器试着施加一个高于这个阈值的力到对象上(从另一个对象上拉它或者推它到另一个对象),然后保持对象到抓取控制器的关节就将断开并且对象将不能再被抓起了。这在TrackedObject抓取机制下也有效,只是这个值确定断开抓取钱控制器可以离对象多远。
∙SpringJointStrength(弹簧关节力):弹簧力保持对象到控制器。小数值将意味着弹簧很松并且对象需要一个更大的力去移动,大数值就意味着弹簧很紧,小点的力就可以移动它。
∙SpringJointDamper(弹簧关节阻尼):弹簧的阻尼量在使用弹簧关节抓取机制下有效。在移动被关节的交互对象时,值越高震动效果越小。
∙ThrowMuliplier(投掷倍数):值用来乘以给定对象被扔出时的速度值。这还可以被用来连同InteractGrab脚本的ThrowMultiplier来让对象被扔的比平常更远(或者输入的值小于1就扔的很近)。

Use Interactions 使用交互

∙IsUsable(是否可用):决定对象是否可以被使用∙HoldButtonToUse:如果勾选,控制器上的使用(use)按钮需要被持续按下来保持使用。如果没有勾选,use按钮用一次按钮按下来启动使用和再一次按下来停止使用。
∙PointerAvtivatesUseAction:如果勾选,当一个世界光束指针(由控制器投射)碰到了交互对象,如果对象的HoldButtonToUse没有勾选的话,当指针在对象上的时候就会运行对象的StartUsing方法,指针移开失效就会运行StopUsing方法。这个选项在被勾选以后,为了防止在用一个指针来使用对象时发生不必要的传送,就不会抛出目标点设置(DestinationSet)事件。
∙RumbleOnUse:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。

下面的事件是被发送的:

∙InteractableObjectTouched:当另一个对象碰到当前对象时发出事件。
∙InteractableObjectUntouched:当其他对象停止触碰当前对象时发出事件。
∙InteractableObjectGrabbed:当其他对象(如控制器)抓握当前对象时发出事件。∙InteractableObjectUngrabbed:当其他对象停止抓握当前对象时发出事件。
∙InteractableObjectUsed:当其他对象(控制器)使用当前对象时发出事件。
∙InteractableObjectUnused:当其他对象停止使用当前对象时发出事件。

发出的事件有效信息载体包涵:∙interactingObject:初始化交互的对象(如控制器)。
脚本基本是提供一个简单的机制来区分游戏世界中的对象是否能被抓取或者使用,最好是把这个脚本看做是一个基类来派生出功能更丰富的脚本。

VRTK_InteractableObject的例子可以看005场景。这个场景还在控制器上使用了VRTK_InteractTouch和VRTK_InteractGrab脚本,来展示一个交互对象怎样被抓取和对齐到控制器以及在游戏世界中扔出。

另外一个例子在场景013。这个场景展示了更多对象,可以被按住按钮抓取或者切换按钮点击来抓取的对象,还有对象通过切换它们的Using状态来展示多种物品可同时被开启。

(十一)VRTK_InteractTouch(触摸交互对象)

触摸交互脚本被添加到[CameraRig] 预制里的控制器对象上。


Paste_Image.png
可用参数如下:

*** ∙ Hide Controller On Touch: 当有效触碰发生时隐藏控制器模型
*** ∙ Hide Controller Delay:
触摸隐藏控制器之前的等待秒数。
*** ∙ Global Touch Highlight Color: ***如果交互对象被触碰就能高亮显示,没有设置本地颜色的话就使用全局颜色。

发出事件如下:
∙ ControllerTouchInteractableObject:当有效对象被碰到时发出
∙ ControllerUntouchInteractableObject: 当一个有效对象不再被触碰时发出发出事件有效

载体信息包含:
∙ controllerIndex(控制器序号):正在交互的控制器的序号
***∙ Target(目标): ***控制器正在交互的对象的GameObject

(十二)VRTK_InteractGrab(抓取交互对象)

交互抓取脚本被添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听抓取和释放交互游戏对象的控制器按钮事件。

它监听AliasGrabOn和AliasGrabOff 事件来确定对象合适应该被抓取和释放。控制器对象也需要添加VRTK_InteractTouch 脚本用来确定何时一个可交互对象被触摸到。

只有有效的被触摸对象才能被抓取。如果控制器触碰到一个包含VRTK_InteractableObject脚本并且isGrabbable 标志位设置为真的游戏对象,该对象就可以被抓取。

如果有效可交互对象是可抓取的,按下控制器上所设置的抓取按钮(默认是Trigger按钮)将抓取和对齐对象到控制器上,并且直到抓取按钮松开才会被释放。

当控制器抓取按钮松开时,如果可交互对象是可抓取的,它将会被按一定速率沿着控制器松开时的方向进行推动,这就模拟了对象投掷。可交互对象需要碰撞体用来激活触发和一个刚体用来拾取它们并在游戏世界中四处移动它们。)

VRTK脚本解析_第10张图片
Paste_Image.png
可用脚本参数如下:

∙ Controller Attach Point:控制器模型上用来吸附抓取的对象的刚体点(默认为tip)
∙ Hide Controller On Grab:当有效抓取发生时隐藏控制器模型。
∙ Hide Controller Delay:在抓取时隐藏控制器之前的等待时间秒数。
*** ∙ Grab Precognition(预先抓取):8** 在抓取按钮按下时和控制器正在抓取某个东西时之间时间量。例如,如果一个对象下落过快,因为人的反应时间可能很难及时按下抓取按钮来抓住对象。这个值越高意味着抓取键可以越提前在控制器碰到对象以及碰撞发生前按下,如果抓取键仍然被按下(如果抓取对象需要持续按键抓取的话),则抓取动作就会成功。
*** ∙ Throw Multiplier(投掷乘数):用来乘以对象被扔出时速度的量。在放大 CameraRig 来模拟能够把物体扔的更远时是很有用的。
*** ∙ Create Rigid Body When Not Touching:
如果勾选,当抓取按钮按下时,如果控制器没有碰到一个可交互的对象,那么添加到控制器上的刚体就允许控制器去推动周围其他的刚体对象。

发出事件如下:
∙ ControllerGrabInteractableObject: 当有效对象被抓取时发出
∙ ControllerUngrabInteractableObject: 当有效对象从抓取到放开时发出

发出事件有效载体信息包含:
***∙ controllerIndex: ***正在交互的控制器序号
***∙ target: ***控制器正在交互的对象的GameObject

VRTK_InteractGrab的例子可以参见005场景。场景演示了抓取挂有VRTK_InteractableObject 脚本的可交互对象。对象可拾起可抛出。

更复杂一点的例子可以参见场景013,这里演示了每个控制器都能单独抓取和使用对象并且对象也可以被同时切换它们的使用状态。014场景演示了不同的对齐抓取的对象到控制器上的机制。

(十三)VRTK_InteractUse(使用可交互对象)

交互使用脚本被添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听使用和停止使用交互游戏对象的控制器按钮事件。

它监听AliasUseOn 和AliasUseOff 事件来确定对象合适应该被使用和停止使用。
控制器对象也需要添加VRTK_InteractTouch脚本来决定何时可交互对象被触碰。
只有有效的触碰对象才能被使用。如果控制器触碰到一个包含VRTK_InteractableObject 脚本且isUsable标志位设置为真,这个对象就能被使用。


Paste_Image.png
可用脚本参数如下:

∙ Hide Controller On Use:当有效使用动作开始时隐藏控制器模型
*** ∙ Hide Controller Delay:***在使用之前,隐藏控制器的等待时间秒数
发出事件如下:
∙ ControllerUseInteractableObject: 当一个有效对象开始被使用时发出∙ ControllerUnuseInteractableObject: 当一个有效对象停止被使用时发出

发出的事件的有效载体信息包含:
∙ controllerIndex: 正在交互的控制器序号
∙ target: 控制器正在交互的对象的GameObject

例子参见006场景,模拟打开一扇门和关上。地上也有一个立方体可以被抓取来展示可交互对象怎么被使用或者抓取

另一个例子可参见008场景,它展示了对象可以用一个按钮抓取并用另一个按钮使用。

(十四)VRTK_ObjectAutoGrab(自动抓取可交互对象)

通过把VRTK_ObjectAutoGrab脚本加到控制器上并指定应该默认抓取的对象,来让特定控制器能自动抓取可交互对象。
自动抓取对象脚本添加到[CameraRig] 预制里的控制器对象上,控制器对象还需要添加VRTK_InteractGrab 脚本。


Paste_Image.png
可用脚本参数如下:

*** ∙ Object To Grab(抓取的对象):在游戏开始时被控制器抓取的游戏对象(在场景或者预制里)。
*** ∙ Clone Grabbed Object(复制被抓取对象):
如果勾选,Object To Grab(抓取的对象)将被复制到一个新对象并添加到控制器上,而被复制的对象留在场景里。这在两个控制器都需要抓取同样的对象时是需要的,因为单个对象不能被不同的控制器同时抓取。如果被抓取的对象是一个预制就也需要被复制,因为它需要存在于场景中被抓取。

例子参见026场景。这里每个控制器自动抓取了一把剑,同时为了防止剑被扔掉,剑被永久的添加到用户的控制器上

VRTK脚本解析_第11张图片
Paste_Image.png

原文来自:http://blog.csdn.net/kitok/article/details/52836088

你可能感兴趣的:(VRTK脚本解析)