目录

一、示例场景[001-Interactions]ControllerEvents:用于对手柄(控制器)上各个按键的监听;

二、封装VRTK的流程

三、示例场景[002-Pointers]StraightPointer:发射射线;

四、射线如何射中物体、忽略物体

五、VRTK_Pointer组件

六、VRTK_StraightPointerRenderer组件

七、示例场景[002-Pointers] StraightPointer:VRTK模型描边过程

八、和UGUI交互

九、隐藏掉Canvas上的BoxCollider,给专属UI添加BoxCollider

十、示例场景[003-Pointers] BezierPointer:贝塞尔曲线

十一、示例场景[004-Locomotion] Teleporting:瞬移

十二、VRTK_Destination Point

十三、实现手柄抓取物体

十四、VRTK组件属性注释

十五、待更新


一、示例场景[001-Interactions]ControllerEvents:用于对手柄(控制器)上各个按键的监听;


HTC Vive手柄按键:

1.Trigger扳机键

· TriggerPressed - 当trigger被扣下一半左右时发送事件.
· TriggerReleased - 当Trigger从扣下一半的状态释放后发送事件.
· TriggerTouchStart - 当trigger被扣下一点点时发送事件.
· TriggerTouchEnd - 当trigger完全没有被扣下时发送事件.
· TriggerHairlineStart - 当trigger扣下的程度超过了当前的hairline阈值时发送事件.
· TriggerHairlineEnd - 当tringger释放程度超过了当前的hairline阈值时发送事件.
· TriggerClicked - 当trigger在扣下的过程中发送事件.比TriggerPressed触发稍晚
· TriggerUnclicked - 当trigger不再处于clicked状态时发送事件.
· TriggerAxisChanged - 当trigger扣下的量发生变化时发送事件.

2.Touchpad触摸板键

· TouchpadTouchStart - 当touchpad被触摸时发送事件 (不是点击或者摁下).
· TouchpadTouchEnd - 当touchpad不再被触摸时发送事件.
· TouchpadPressed - 当touchpad被按下的时候发送事件(在触摸的基础上,需要比触摸的按压程度大).
· TouchpadReleased - 当touchpad从被按下(非触碰)的状态下释放时发送事件.
· TouchpadAxisChanged - 当touchpad被触摸的点改变时发送事件.

3.Grip侧边栏键

排序(执行顺序)如下:
· GripTouchStart //当grip被按下时发送事件.//当grip被释放时发送事件
· GripPressed
· GripClicked
· GripUnclicked
· GripReleased
· GripTouchEnd

4.ButtonTwo菜单键

· ButtonTwoTouchStart
· ButtonTwoPressed
· ButtonTwoReleased
· ButtonTwoTouchEnd

二、封装VRTK的流程

1.删除新场景中的MainCamera,创建一个空物体[VRTK_SDK Manager],给该空物体添加一个脚本VRTK_SDK Manager.cs;

2.再创建一个空物体[SDK Setup],给该空物体添加一个脚本VRTK_SDK Setup.cs;

3.将SteamVR—Prefabs文件夹下的[CameraRig]和[SteamVR]拖拽到空物体[SDK Setup]下,然后给脚本VRTK_SDK Setup下的Quick Select 指定为SteamVR,点击脚本VRTK_SDK Manager下的Auto Populate按钮;

4.创建一个空物体[ControllerScripts],在它下面再创建两个空物体[LeftController]和[RightController],然后给这两个空物体上添加一个脚本VRTK_Controller Events.cs,然后选中空物体[VRTK_SDK Manager],将空物体[LeftController]和[RightController]拖拽到脚本VRTK_SDK Manager.cs里面的Left Controller和Right Controller上;

5.创建一个空物体ExampleScripts,在它下面创建两个空物体Left和Right,分别给两个空物体上添加脚本VRTK_Example_Controller Events Delegate Listener.cs,将空物体[LeftController]和[RightController]分别拖拽到脚本VRTK_Example_Controller Events Delegate Listener.cs里面的Controller Events上,然后点击运行,查看手柄上按键按下后打印的信息;

注意:在运行之前,先要让[SDK Setup]设为隐藏状态,否则会初始化失败,运行时无法打印出手柄(控制器)按键信息。

三、示例场景[002-Pointers]StraightPointer:发射射线;

1.继以上“二、封装VRTK的流程”的步骤,继续给空物体[LeftController]和[RightController]添加两个脚本:VRTK_Pointer.cs和VRTK_StraightPointerRenderer.cs,注意将两个空物体分别拖拽到各自的VRTK_Pointer.cs的PointerRenderer组件上;

四、射线如何射中物体、忽略物体

1.给物体添加Collider碰撞体组件,射线即可射中物体;

2.创建一个空物体Policy,给该空物体上添加一个脚本VRTK_PolicyList.cs,Operation选择Ignore忽略,Check Types选择Tag标签,填写对应想要忽略的标签名字,然后给想要忽略的物体身上添加该标签;

3.分别给空物体[LeftController]和[RightController]身上的VRTK_Pointer.cs组件指定Target List Policy(拖拽空物体Policy),即可完成对该物体的射线忽略;

五、VRTK_Pointer组件

1.Enable Teleport:是否瞬移;

2.Target List Policy:包含、忽略相应指定的层级物体;

3.Activation Button:用来激活射线的手柄按键;

4.Hold Button To Activate:勾选上时,只有按下上述按键的时候才会触发;不勾选时,按下一次打开射线,再按下一次则关闭射线;

5.Activate On Enable:勾选上时,运行一开始默认就是射线显示的状态;

6.Activation Delay:延时x秒之后,才显示出来射线;

7.Selection Button:选择按钮;(一般用于UI点击后触发)

8.Select On Press:不勾选时,按键抬起后才会触发;勾选时,按下按键就会触发;、

9.Selection Delay:延时x秒之后,才触发UI功能;

10.Interact with Objects:射线和物体进行交互;

11.Grab To Pointer Tip:抓取交互物体的尾部;

六、VRTK_StraightPointerRenderer组件

1.Valid Collision Color:射线触碰到有效物体时发出的颜色;

2.Invalid Collision Color:射线触碰到无效物体时发出的颜色;

3.Tracer Visibility:On When Active(按键按下时射线才显示出来)、Always On(射线一直处于显示状态)、AlwaysOff(射线一直处于关闭状态);

4.Cursor Visibility:On When Active(按键按下时射线末端小球才显示出来)、Always On(射线末端小球一直处于显示状态)、AlwaysOff(射线末端小球一直处于关闭状态);

5.Maximum Length:射线最大长度;

6.Scale Factor:射线宽度;

7.Cursor Scale Multiplier:射线末端小球的大小;

8.Cursor Distance Rescale:勾选上后,射线末端小球随着距离的远近而发生大小变化;(距离越远小球越大,距离越近小球越小)

9.Custom Tracer:自定义的射线;

10.Custom Cursor:自定义的射线末端小球;(身上不要带Collider碰撞体)

11.Cursor Match Target Rotation:勾选上后,射线末端小球会贴合着物体形状进行旋转;

七、示例场景[002-Pointers] StraightPointer:VRTK模型描边过程

1.给需要描边的、含有Mesh Renderer的模型上添加一个Collider碰撞体组件,然后继续给该模型身上添加脚本VRTK_Outline Object Copy Highlighter.cs;

2.添加EventSystem事件系统;

3.给空物体[LeftController]和[RightController]添加脚本Test_PointerManager.cs;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;
using VRTK.Highlighters;public class Test_PointerManager : MonoBehaviour
{public Color EnterColor, MarkerSetColor;private VRTK_Pointer pointer;private void Awake(){pointer = GetComponent<VRTK_Pointer>();pointer.DestinationMarkerEnter += Pointer_DestinationMarkerEnter;pointer.DestinationMarkerExit += Pointer_DestinationMarkerExit;pointer.DestinationMarkerSet += Pointer_DestinationMarkerSet;}private void OnDestroy(){pointer.DestinationMarkerEnter -= Pointer_DestinationMarkerEnter;pointer.DestinationMarkerExit -= Pointer_DestinationMarkerExit;pointer.DestinationMarkerSet -= Pointer_DestinationMarkerSet;}private void Pointer_DestinationMarkerSet(object sender, DestinationMarkerEventArgs e){HighLight(e.target, MarkerSetColor);}private void Pointer_DestinationMarkerExit(object sender, DestinationMarkerEventArgs e){HighLight(e.target, Color.clear);}private void Pointer_DestinationMarkerEnter(object sender, DestinationMarkerEventArgs e){HighLight(e.target, EnterColor);}private void HighLight(Transform target, Color color){VRTK_BaseHighlighter highlighter = (target != null ? target.GetComponent<VRTK_BaseHighlighter>() : null);if (highlighter != null){highlighter.Initialise();if (color != Color.clear){highlighter.Highlight(color);}else{highlighter.Unhighlight();}}}
}

八、和UGUI交互

1.给空物体[LeftController]和[RightController]添加脚本VRTK_Controller Events.cs、VRTK_UI Pointer.cs、VRTK_Pointer.cs(指定Pointer Renderer)、VRTK_Straight Pointer Renderer.cs;

2.创建一个Canvas,Render Mode模式改成World Space,移动到合适的位置,添加一个Button,给Canvas上添加脚本UI Canvas.cs,注意:EventSystem是必不可少的;

九、隐藏掉Canvas上的BoxCollider,给专属UI添加BoxCollider

1.找到脚本VRTK_UICanvas.cs,注释掉以下代码段:

 if (canvas.gameObject.GetComponent<BoxCollider>() == null){Vector2 pivot = canvasRectTransform.pivot;float zSize = 0.1f;float zScale = zSize / canvasRectTransform.localScale.z;canvasBoxCollider = canvas.gameObject.AddComponent<BoxCollider>();canvasBoxCollider.size = new Vector3(canvasSize.x, canvasSize.y, zScale);canvasBoxCollider.center = new Vector3(canvasSize.x / 2 - canvasSize.x * pivot.x, canvasSize.y / 2 - canvasSize.y * pivot.y, zScale / 2f);canvasBoxCollider.isTrigger = true;}

2.手动版:单独给Button等UI添加BoxCollider,把Button的Width和Height值分别复制粘贴给BoxCollider下的Size的X和Y值;

3.自动版:创建一个脚本UGUI_AutoBindBoxCollider.cs,挂载到需要添加BoxCollider的UI控件上,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UGUI_AutoBindBoxCollider : MonoBehaviour
{void Start(){BoxCollider collider = gameObject.AddComponent<BoxCollider>();collider.size = new Vector3(GetComponent<RectTransform>().rect.width,GetComponent<RectTransform>().rect.height, 1);//使之宽和高不受物体锚点的影响collider.isTrigger = true;}
}

十、示例场景[003-Pointers] BezierPointer:贝塞尔曲线

脚本VRTK_Bezier Pointer Renderer.cs:

(1)Maximum Length:贝塞尔曲线的最大长度;

(2)Tracer Density:射线发出曲线的密集度;

(3)Cursor Radius:曲线末尾光标的半径;

(4)Height Limit Angle:高度限制角度(曲线最高抬高的高度);

(5)Curve Offset:曲线偏移;

(6)Rescale Tracer:曲线根据距离进行缩放;

1.给空物体[LeftController]和[RightController]添加脚本VRTK_Controller Events.cs、VRTK_Pointer.cs(指定Pointer Renderer)、VRTK_Bezier Pointer Renderer.cs;

2.自定义添加贝赛尔曲线移动光标:给Custom Tracer添加预设BezierPointerAnimatedTracer、给Custom Cursor添加预设BezierPointerValidCursor、给Valid Location Object添加预设BezierPointerCursorBeam、给Invalid Location Object添加预设BezierPointerInvalidCursor;

十一、示例场景[004-Locomotion] Teleporting:瞬移

1.给空物体ControllerScripts上添加一个脚本VRTK_Height Adjust Teleport.cs(瞬移方式1:颜色渐变),给该脚本指定Policy,该脚本配合VRTK_Pointer中的Enable Teleport使用;

2.另一个瞬移脚本VRTK_Dash Teleport.cs(瞬移方式2),可替换VRTK_Height Adjust Teleport.cs,将Blink Transition Speed改成0;

3.除了以上两个瞬移脚本之外,还有一个脚本VRTK_Body Physics.cs是用来给SteamVR下的[CameraRig]添加碰撞体和刚体组件的;

十二、VRTK_Destination Point

1.Enable Teleport:是否支持瞬移;

2.Snap To Point:勾选时,表示射中后移动到指定位置;不勾选时,表示射中哪儿就移动到哪儿,跟指定位置有差距;

3.Hide Pointer Cursor On Hover:勾选上,射中后只有一个Cursor;不勾选,则射中后出现两个Cursor;

十三、实现手柄抓取物体

1.给空物体[LeftController]和[RightController]添加脚本VRTK_Interact Grab.cs、VRTK_Interact Touch.cs,

2.创建一个Sphere小球,给小球加上脚本VRTK_Interactable Object.cs(指定自身的Grab Attach Mechanic Script)、VRTK_Child Of Controller Grab Attach.cs,给小球添加Rigidbody组件;

3.若将空物体[LeftController]和[RightController]下的VRTK_Pointer.cs中的Interact With Objects勾选上,则可以通过射线抓取物体到手中;若将Grab To Pointer Tip勾选上,则可以通过射线抓取物体到射线末端;

十四、VRTK组件属性注释

1.VRTK_InteractGrab脚本
(1)GrabPrecognition:从按下抓取按钮到控制器抓取对象之间的时间;
(2)ThrowMultiplier:将要抛出的任何Interactable对象的速度相乘的系数;
(3)CreateRigidBodyWhenNotTouching:如果选中此选项并且按下抓取按钮时Interact Touch未触及任何对象,则会将Rigidbody添加到交互对象以允许其推送其他Rigidbody对象;
(4)ControllerAttachPoint:将抓取的Interactable对象设置到控制器模型上的刚体上。如果为空,则将其设置为SDK默认值;

2.VRTK_InteractTouch脚本
(1)CustomColliderContainer:包含复合碰撞器的可选GameObject,用于表示触摸对象。 如果这是空的,那么将在运行时自动生成Colliders以匹配SDK默认控制器;

3.VRTK_InteractableObject脚本

(1)DisableWhenIdle:如果选中此选项,则在未与Interactable对象进行交互时,将禁用Interactable Object组件;
(2)IsGrabbable:确定是否可以抓取Interactable对象。当正在抓取的时候为True,反之Flase;
(3)HoldButtonToGrab:如果选中此项,则需要持续按住控制器上的抓取按钮以继续抓取。如果取消选中此选项,则抓取按钮会切换抓取操作,只需按一下按钮即可抓取,再按一下钮即可释放;
(4)StayGrabbedOnTeleport:如果选中此项,那么当传送出现时,Interactable Object将一直抓到控制器。如果未选中,则在传送发生时将释放Interactable对象;
(5)ValidDrop:确定控制器抓取按钮可以在什么情况下删除Interactable Object;
         NoDrop - 无法通过控制器删除该对象;
         DropAnywhere - 可以通过控制器将对象放在场景中的任何位置;
         DropValidSnapDropZone - 只有将对象悬停在有效的快照放置区域上时,才能删除该对象;
(6)GrabOverrideButton:设置为xxx将覆盖Interact Grab脚本上的“Grab Button”按钮用于抓取此特定的Interactable对象。
设置为“未定义”将意味着Interact Grab脚本上的“Grab Button”将抓取该对象;
(7)GrabAttachMechanicScript:这决定了抓取时抓取的Interactable Object如何链接到控制器;
(8)IsUsable:确定是否可以使用Interactable对象;
(9)HoldButtonToUse:如果选中此项,则需要持续按住控制器上的使用按钮以继续使用;
                                       如果取消选中,则使用按钮切换使用操作,按一下按钮开始使用,另一按钮停止使用;
(10)UseOnlyIfGrabbed:如果选中此选项,则只有当前正在抓取Interactable Object时才能使用它;
(11)PointerActivatesUseAction:如果选中此项,那么当指针与Interactable对象发生碰撞时,它将激活它的使用操作;

4.VRTK_BaseGrabAttach脚本
(1)PrecisionGrab:如果选中此项,那么当Interact Grab抓取Interactable Object时,它将精确地抓取它并在Interact Touch触摸的Interactable Object上的特定点处拾取它;
(2)ThrowVelocityWithAttachDistance:如果选中,那么当抛出Interactable Object时,Interactable Object的附着点和Interact Grab附加点之间的距离将用于计算更快的投掷速度;
(3)OnGrabCollisionDelay:在第一次抓取时会延迟影响Interactable对象的碰撞的时间,如果Interactable Object在被抓取时可能卡在另一个GameObject中,这将非常有用;

5.VRTK_ArtificialRotator脚本
(1)OperateAxis:绕着哪个轴旋转;
(2)IgnoreCollisionsWith:用于忽略碰撞事件的GameObjects集合;
(3)ExcludeColliderCheckOn:确定是否应创建默认Collider时要排除的GameObjects集合;
(4)MinMaxThresholdAngle:在达到最小或最大角度之前,旋转器旋转可以处于最小或最大角度内的角度;
(5)StepValueRange:沿“operateAxis操作轴”注册的旋转器的最小和最大步进值;
(6)StepSize:旋转器值将在“stepValueRange步进值范围”之间变化的增量;
(7)SnapToStep:如果选中此选项,则旋转器将沿“stepValueRange步进值范围”捕捉到最近一步的角度;
(8)SnapForce:旋转器沿“操作轴”捕捉到相关角度的速度;
(9)DetachDistance:手柄和旋转器的距离超过这个值将会自动释放;
(10)RotationAction:确定如何根据抓取对象的操作计算对象的旋转;
(11)GrabbedFriction:抓住旋转器时的模拟摩擦;
(12)ReleasedFriction:旋转器释放时的模拟摩擦;

6.VRTK_ControllerRigidbodyActivator脚本
(1)Isenabled:如果选中此选项,碰撞器将在碰撞过程中打开和关闭其刚体;
(2)Activateinteracttouch:如果选中此选项,则刚性体激活器将激活交互触摸脚本上的刚性体和碰撞器;
(3)Activatetrackedcollider:如果选中此选项,则刚性体激活器将在控制器跟踪的碰撞器脚本上激活刚性体和碰撞器;

7.VRTK_PhysicsPusher脚本
(1)PressedDistance :沿‘操作轴’的按下距离;
(2)Statypressed:如果选中此选项,则当推料器达到最大位置时,它将保持在按下位置;
(3)MinMaxLimitThreshold :推动器当前沿‘操作轴’的标准化位置必须在推动器的最小和最大限制内的阈值;
(4)TargetForce :将推动器推向目标位置所需的力;

(5)PositionTarget :默认位置,标准化值为‘0f’(起点)到‘1f’(终点);
(6)RestingPosition :滑块位于标准化值“0f”(起始点)到“1f”(结束点)中给定的默认静止点时的位置);
(7)ForceRestingPositionThreshold :如果滑块未被抓取,则在将其强制返回到“静止位置”之前,滑块必须位于“静止位置”内的标准化阈值;

8.VRTK_PhysicsRotator脚本
(1)GrabMechanic:操作旋转器时要使用的可交互对象抓取机制的类型;
         TrackObject - 跟踪对象抓取机制;
         RotatorTrack - 旋转轨道抓取机制;

9.VRTK_SnapDropZone脚本
(1)HighlightObjectPrefab:当放置物体的时候放置区域高亮显示的模型,这里指定需要放置的物体;
(2)SnapType:将有效的可交互对象放到快照区域中时要应用的快照类型;
(3)UseKinematic - 将可交互对象rigidbody设置为“iskinematic=true”;
(4)UseJoint - 将可交互对象的刚体作为“连接体”附加到关节;
(5)UseParenting - 将快照区域设置为可交互对象的父级,并将其刚体设置为“iskinematic=true”;
(6)SnapDuration:被放置的物体移动到放置点,位置、旋转和缩放所需的时间;
(7)Applyscalingonsnap:如果选中此选项,则放置区域的缩放大小将应用到被放置的对象;
(8)Clonenewonnap:如果选中此选项,则当被放置的对象从放置区域取消放置时,该放置对象的克隆将被放回到放置区域;
(9)Highlightcolor:放置区域处于活动状态时使用的颜色;
(10)DefaultSnappedInteractableObject:指定一个默认放置到放置区域的物体交互对象,要保证这个交互对象在给定的策略列表内;

10.VRTK_ControlAnimationGrabAttach脚本
(1)AnimationTimeline:如果设置了此选项,则如果同时设置了“Animator Timeline”,则该选项将被忽略;
(2)MaxFrames:时间线中的最大帧数;
(3)DistanceMultiplier:手柄和可交互对象的距离对动画帧数的影响,将距离乘以distanceMultiplier 量;
(4)BreakForce:断裂前Joint能承受的最大力。设置为“infinity”可确保关节牢不可破;
(5)Strength:弹簧的强度;
(6)Damper:弹簧的阻尼量;
(7)ForceKinematicOngrab:如果选中此选项,则当抓取发生时,它将强制可交互对象上的刚体为‘运动学’;
(8)ReleaseDecelerationDamper:“当释放时模拟持续动量,使可交互对象减速的阻尼器。”数字越高,可交互对象在释放时完全停止的速度就越快;
(9)ResetToOrignOnReleaseSpeed:可交互对象释放时返回其原点位置的速度。如果“resetToOrignOnReleaseSpeed ”为“0f”,则不会重置位置;

11.VRTK_InteractObjectAppearance脚本
(1)ObjectToAffect:“要影响外观的游戏对象。”如果为空,则将使用交互对象(通常是控制器);
(2)ObjectToMonitor:要监视交互事件的可交互对象(接近触摸/触摸/抓取/使用);
(3)GameObjectActiveByDefault:指定的objectToAffect对象是否可用
(4)RendererVisibleByDefault:指定的objectToAffect对象是否渲染

12.VRTK_PositionRewind脚本
(1)PushbackDistance:回放时将播放区域向后推的额外距离,以防止再次紧靠墙;
(2)CrouchThreshold:决定耳机在被视为用户蹲下之前必须降低多少的阈值。最后一个安全位置将只记录在非卧姿位置;
13.VRTK_TouchpadControl脚本
(1)DeviceForDirection:将要移动的方向是此设备的方向;
(2)DisableOtherControlsOnActive:如果选中此选项,则无论何时更改附加控制器上的轴,其他控制器上相同类型的所有其他对象控制脚本都将被禁用;
(3)AffectOnFalling:如果存在“vrtk_bodyphysics”脚本,并且选中了该脚本,则对象控件将在下降时影响Play Area;
(4)ControlOverrideObject:要应用对象控件的游戏对象。如果为空,则将控制Play Area;
(5)AxisDeadzone :触摸板上的盲区阈值,如果触摸位置在指定盲区内,将忽略输入。介于'0f'和'1f`.')之间;

14.VRTK_SlideObjectControlAction脚本
(1)MaximumSpeed:位移的最大速度;
(2)Deceleration:轴没有改变的时候减速率;
(3)FallingDeceleration:当轴不再更改且对象正在下降时的速度减速率;
(4)SpeedMultiplier:当按下Modifier Button时要应用的速度倍增器;

(5)WarpDistance:移动的距离;
(6)WarpMultiplier:当按下Modifier Button时要应用于扭曲的乘数;
(7)WarpDelay:在执行另一个扭曲之前需要经过的时间;
(8)FloorHeightTolerance:移动前和移动后地板多少的高度公差允许是有效的扭曲;
(9)BlinkTransitionSpeed:眨眼特效淡出和淡入的速度;

(10)AnglePerSnap:每一次要旋转的角度;
(11)AngleMultiplier:按下Modifier Button时要应用的旋转角度乘数;
(12)SnapDelay :执行另一个捕捉旋转之前需要经过的时间;
(13)AxisThreshold:侦听轴需要超过的阈值,如果阈值为0,则忽略该阈值;

15.VRTK_StepMultiplier脚本
(1)AdditionalMovementMultiplier:较高的数值模拟较大的游戏区域,但可能会太不舒服;
(2)HeadZoneRadius:如果它低了,蹲下时会感到不舒服;

16.VRTK_MoveInPlace脚本
(1)ControlOptions:确定移动参数的设备;(晃动的设备)
          HeadsetAndControllers - 跟踪耳机和控制器以进行运动计算;
          ControllersOnly - 仅跟踪控制器以进行移动计算;
          HeadsetOnly - 仅跟踪耳机以进行移动计算;
(2)DirectionMethod :确定前进的方法;
         Gaze - 将始终朝当前的方向移动;
         ControllerRotation - 将沿控制器指向的方向移动(平均);(一个手柄按下engage button,另一个手柄晃动,将会朝着这个手柄的指向移动)
         DumbDecoupling - 当次按下engage button始终将朝着他们第一眼看到的方向移动;
         SmartDecoupling - 只有当头盔朝向与控制器相同的方向时,才会朝着它们所看到的方向移动;
         EngageControllerRotationOnly - 将沿按下engage button的控制器指向的方向移动;(一个手柄按下engage button,另一个手柄晃动,将会朝着按下engage button手柄的指向移动)
         LeftControllerRotationOnly - 将沿左控制器指向的方向移动;
         RightControllerRotationOnly - 将沿右控制器指向的方向移动;
(3)SmartDecoupleThreshold:在使用 Smart Decoupling Direction Method时,所有被跟踪对象(控制器、耳机)必须在范围内才能更改方向的程度阈值;
(4)Sensitivity:“在虚拟世界中注册所需的最大移动量。”减小此值将增加加速度,反之亦然;

17.VRTK_RadialMenu脚本
(1)ButtonThickness:按钮应填充的菜单百分比,1.0是饼图切片,0.1是细环;
(2)OffsetDistance:这会在各个按钮之间创建空格;
(3)RotateIcons:按钮图标应根据其弧旋转还是与控制器垂直旋转;
(4)IconMargin:图标应保留在按钮内的像素边距;
(5)ExecuteOnUnclick:释放按钮时是否应执行按钮操作,而不是在按下按钮时立即执行;
(6)BaseHapticStrength:当所选按钮更改或按下按钮时,震动的基本强度;
(7)DeadZone :拨号中间的死区;

18.VRTK_PlayAreaCursor脚本
(1)UsePointerColor:如果选中此选项,则指针的有效/无效颜色也将用于在碰撞/不碰撞时更改播放区域光标的颜色;
(2)PlayAreaCursorDimensions:确定播放区域光标和碰撞器的大小。如果值保留为零,则播放区域光标将调整为校准的播放区域空间;
(3)HandlePlayAreaCursorCollisions:如果选中此选项,则如果播放区域光标与任何其他对象发生碰撞,则指针颜色将更改为“指针丢失颜色”;
(4)HeadsetOutOfBoundsIsCollision:如果选中此选项,则如果用户的头盔在播放区域光标边界之外,则即使播放区域未与任何内容发生碰撞,也将视为碰撞;
(5)DisplayOnInvalidLocation:如果选中此选项,则当位置无效时,将显示播放区域光标;

19.VRTK_ObjectAutoGrab脚本
(1)ObjectToGrab:手柄将要抓取的可交互对象;
(2)ObjectIsPrefab:如果‘要抓取的对象’是预设的,则需要选中此项;如果‘要抓取的对象’已存在于场景中,则需要取消选中此项;
(3)CloneGrabbedObject:如果选中此选项,则“要抓取的对象”将被克隆到新的可交互对象中,并被手柄抓取,从而使现有可交互对象留在场景中。”;
         如果要将同一个可交互对象抓取到多个手柄下,则需要勾选;
         如果一个被抓取的可交互对象是一个预设对象,则需要勾选;
(4)AlwaysCloneOnEnable:如果选中了“Clone Grabbed Object”,并且选中了此选项,则每当禁用并重新启用此脚本时,它将再次创建该可交互对象的新克隆到手柄上;
        如果未选中此选项,则原始克隆的可交互对象将尝试再次被捕获。如果原始克隆对象不再存在,则将创建新的克隆;
(5)AttemptSecondaryGrab:如果选中此选项,则‘要抓取的对象’将尝试进行次抓取和主抓取;

十五、待更新

【Unity插件001】VRTK3.3.0的使用相关推荐

  1. SteamVR 2.0 Unity插件使用指南

    随着VR生态的日益增长,以及Valve Knuckles控制器的逐渐完善,SteamVR未来能够提供给用户更多的交互方式,比如手指跟踪和力反馈.近期,Valve在Unity资源商店中将SteamVR插 ...

  2. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  3. Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了

    自己做的小游戏需要接广告,之前尝试过UnityAds和AdMob,但是都有点小问题.UnityAds对国内本土支持不好,Banner广告经常没有内容.Admob基本上都要对接到googlePlay,国 ...

  4. ugui 转轮_【Unity插件】FingerGestures 插件使用

    FingerGesture在项目中的作用是管理用户输入和识别手势和鼠标或手指事件.可能有些人还不是很会用,下面就给大家介绍下Unity插件FingerGesture的使用教程. fingerGestu ...

  5. Unity插件:UFPS

    Unity插件:UFPS使用教程(一) Unity插件:UFPS使用教程(一) Unity插件:UFPS使用教程(一) 先挂上UFPS官方文档:https://docs.google.com/docu ...

  6. 相见恨晚!Unity插件——DoTween介绍

    前言: 今天来学习一下大名鼎鼎的Unity插件--DoTween. DoTween DOTween是一款针对Unity的快速高效.类型安全的面向对象的补间动画引擎,并且对于C#用户做出了很多的优化. ...

  7. Unity 插件使用笔记

    目录 AssetBundle AssetBundle Manager EasySave UGUI-Edito Unity Favourites Panel Curvy Spline 流体插件Obi F ...

  8. Unity插件使用方法

    Unity插件使用方法 EPPlus(Excel读写) Default Playables PlayableGraph Visuallizer Recorder(录屏工具) EPPlus(Excel读 ...

  9. Unity插件NativeGallery拉取手机相册的使用简记

    Unity插件NativeGallery拉取手机相册的使用简记 拉取手机相册 文档摘要 1. 关于 2. 使用设置 3.常见问题解答 项目示例 资源链接 拉取手机相册 项目中使用到了拉取手机相册的功能 ...

  10. 日落20181218001 - Unity插件应用之ShaderForge制作顶点动画

    环境 系统:Windows 10 引擎:Unity 2017.2.1f1 工具:Shader Forge 1.38 目的 使用Shader Forge制作顶点动画的实例. (1)场景布局如下. (1- ...

最新文章

  1. 使用SVG中的Symbol元素制作Icon
  2. 拥抱高效、拥抱 Bugtags 之来自用户的声音(三)
  3. 维塔与 Magic Leap 的MR游戏发布概念片
  4. Python教程:作用域与嵌套函数
  5. SQL Server 2000 To SQL Server 2005
  6. 基于 WebRTC 实现自定义编码分辨率发送
  7. IOS开发基础之音频工具类封装AVAudioPlayer
  8. 【计算机网络复习】1.1.2 标准化工作及相关组织
  9. JavaScript:数据类型判断的方法
  10. 【干货】GRU神经网络
  11. 学习Cocos2d的博客 --推荐
  12. oracle表增加序列字段,Oracle创建表和创建序列和修改,增加sql字段
  13. SSO单点登录Java实现实例
  14. 2019中兴捧月·初赛心得
  15. SMAIL 语法大全(Dalvik 虚拟机操作码)
  16. Word 2016插入公式快捷键
  17. 计算机组装与维护论文 致谢,计算机组装与维护—计算机应用毕业论文.doc
  18. bf2无限载具服务器,战地2 局域网 飞机无限
  19. 天津大学计算机专业考研考什么,天津大学计算机专业考研难吗
  20. cocos2d lua 环境搭建

热门文章

  1. sketchup 计算机配置,SketchUp Pro2019对电脑硬件要求
  2. H5微信分享、自定义微信分享
  3. 状态分布函数 详细介绍
  4. SpringBoot打通微信公众号模板消息通知
  5. 关于舵轮AGV 的数学模型
  6. book回车键 mac_macbook pro键盘失灵 macbook pro键盘失灵解决办法
  7. 基于imcrop,裁剪人脸视频
  8. 迅雷下载遇到“应版权方要求无法下载”,怎么办
  9. 使用BeautifulSoup爬取百度图片
  10. 音频帧率计算方法(只需要知道 采样率 和 一帧采样数 )