VRTK4.0使用总结UI交互
Posted lyyz2000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VRTK4.0使用总结UI交互相关的知识,希望对你有一定的参考价值。
VRTK4.0使用总结(三)UI交互
一、使用VRTK4.0 UI交互需要导入Tilia.UnityUI 包
需要先使用到Interator交互器和射线组件
二、需要与VR交互的画布Canvas需要设置为WorldSpace模式,并且挂在UICanvas脚本
Tilia.UnityUI 包中有个带UI射线交互的预制体,将这个预制体UI_PointerOnInterator这个组件拖入到我们自己的交互器上
三、设置PointerOnInteractor参数,设置激活按键和选择按键
VRTK4UIToPointer选择这个脚本挂在的射线组件。
需要注意的一点是射线组件的触发和选择按键需要和VRTK4UIPointer脚本设置的按键一致
四、TrackAlias下的手柄子物体上的Interator交互器挂在VRTK4_PlayerObject脚本,设置PointerReference为上一步添加的UI_PointerOnInterator。设置好后,就可以用手柄射线进行UI交互了。
VRTK使用说明
VRTK的使用说明书
引用:https://vrtoolkit.readme.io/docs/summary
资源地址:
https://github.com/thestonefox/VRTK
1.概述
VRTK是一套VR的交互方案,它涵盖了许多常见的解决方案,例如:虚拟空间内的运动。触摸,抓取和使用对象等交互,通过指针或触摸与Unity3d UI元素交互。虚拟空间中的身体物理学。*2D和3D控制,如按钮,杠杆,门,抽屉等
2.入门
入门:关联你的VRSDK,
2.1将Assets/VRTK文件夹导入Unity项目。
2.2将VRTK_SDKManager脚本添加到场景中的GameObject。
2.3SDK Manager处理设置所有内容以通过VRTK_SDKSetups 使用各种支持的SDK 。要使用VR SDK,需要执行以下步骤:
2.4下载SDK并将其导入项目。
2.5创建一个新的空游戏对象。
2.6添加VRTK_SDKSetup到它。
2.7添加VR SDK的游戏对象(例如Camera Rig)作为孩子。
2.8在SDK Setup上设置SDK Selection相应的VR SDK。
2.9确保所有Object References设置都正确Auto Populate或手动设置。
2.10在SDK Manager下Setups添加新插槽并选择该插槽的SDK设置。
3. VR模拟器VRSimulator----机器上的调试
如果你没有设备或者只是想在电脑上做些简单的调试功能,可以使用VR模拟器。
3.1使用VR模拟器的说明
通过添加作为SDK Setup游戏对象的子项的VRSimulatorCameraRig预制件,按照上面的初始
3.2操作步骤:
使用左Alt键在鼠标外观和移动手之间切换。
按Tab键在左手/右手之间切换。
按住左移可以从手的平移变为旋转。
按住左Ctrl键可在X / Y和X / Z轴之间切换。
SDK_InputSimulator预制件上可以找到其他按钮映射。
可以使用预制件上的检查器重新映射所有按钮映射。
4.目前的例子
001_CameraRig_VRPlayArea
显示[CameraRig]预制件使用情况的简单场景。
002_Controller_Events
一个简单的场景,在控制台窗口中显示来自控制器的事件。
003_Controller_SimplePointer
一个具有基本对象的场景,可以通过按下来激活来自控制器的激光束Touchpad。指针事件也显示在控制台窗口中。
004_CameraRig_BasicTeleport
具有基本对象的场景,其可以使用控制器激光束遍历以指向游戏世界中的对象,其中用户将通过按压Touchpad控制器来传送到该对象。当Touchpad释放时,用户被传送到激光束终点位置。
005_Controller_BasicObjectGrabbing
一个具有选择对象的场景,可以通过用控制器触摸它们并按下Grip按钮来抓取它们。释放抓握按钮将使物体沿抓取控制器的方向和速度推进。场景还演示了控制器触摸它们时对象的简单突出显示。交互事件也显示在控制台窗口中。
006_Controller_UsingADoor
具有门可交互对象的场景设置为usable当按下控制器Trigger按钮使用门时,门打开(或者如果门已经打开则关闭)。
007_CameraRig_HeightAdjustTeleport
与选择不同高度的对象,可以使用控制器的激光束在一个对象指向和如果激光束在物体的顶部指向则向用户被传到对象的顶部被遍历场景。此外,它表明如果用户踏入不在对象上的游戏区域的一部分,则用户将落到最近的对象。这也使得用户能够仅通过站立在物体上来攀爬物体,因为从耳机的位置进行地板检测。
008_Controller_UsingAGrabbedObject
具有可交互对象的场景,可以抓取(按下Grip控制器按钮)然后使用(按下Trigger控制器按钮)。桌子上有一把枪可以被拿起来射击,或者是一个奇怪的盒子,当拿起并使用顶部旋转时。
009_Controller_BezierPointer
然而,具有可以使用控制器遍历的不同高度对象的选择的场景,而不是仅仅指向直梁,该梁是弯曲的(在贝塞尔曲线上),其允许在用户不能看见的物品上攀爬。
010_CameraRig_TerrainTeleporting
具有地形对象的场景和可以使用控制器激光束指针遍历的不同高度的3d对象的选择。它显示了高度调整传送器如何用于爬升和减少游戏物体以及穿越地形。
011_Camera_HeadSetCollisionFading
在游戏区域周围有三面墙的场景,如果用户将头部放入任何可碰撞的墙壁中,则耳机会渐变为黑色,以防止看到不需要的物体剪裁伪影。
012_Controller_PointerWithAreaCollision
演示如何使用控制器指针遍历世界但是光束显示投影的游戏区域空间以及空间是否与任何对象发生碰撞的场景,则禁用远程传送操作。这意味着可以创建一个用户无法传送到的区域的级别,因为它们允许用户剪辑到对象中。
013_Controller_UsingAndGrabbingMultipleObjects
一个场景,通过连续按住抓取按钮或按下抓取按钮一次拾取并再次释放来演示如何抓取可交互对象。场景还显示使用按钮可以按住以继续使用或按下使用按钮一次开始使用,再按一次停止使用。这允许多个对象同时进入其使用状态,如此示例场景中所示。
014_Controller_SnappingObjectsOnGrab
具有选定对象的场景,演示对控制器机制的不同捕捉。两把绿色枪,轻剑和剑使用一个Snap Handle,它使用一个空的游戏对象作为可交互对象的子项作为抓取的方向点,因此对象的旋转和位置与给定的旋转和位置相匹配Snap Handle。红色枪使用基本捕捉,不需要精确度,也没有提供不影响物体旋转但是将物体中心定位到控制器上的捕捉点的捕捉手柄。红色/绿色枪利用Precision Snap不影响抓取物体的旋转或位置的物体,并在控制器捕捉点接触物体的位置拾取物体。
015_Controller_TouchpadAxisControl
使用控制器触控板控制的R / C汽车场景。在触摸板上上下移动手指将导致汽车向前或向后行驶。将手指移动到左侧或右侧Touchpad会导致汽车朝那个方向转动。按下Trigger将导致汽车跳跃,这利用触发轴,按下触发器越多,汽车将跳越高。
016_Controller_HapticRumble
一个带有易碎盒子和剑的场景。剑可以被拾起并在盒子里摆动。控制器在适当的振动下隆隆声,取决于剑击中盒子的力度。如果被剑击得足够硬,盒子也会分开。
017_CameraRig_TouchpadWalking
一个场景,通过向前和向后滑动手指向该方向移动,演示如何使用触摸板在游戏世界中移动。在触摸板上左右滑动手指朝向该方向。旋转是通过游戏中的用户在场所空间中物理地旋转他们的身体来完成的,并且无论耳机看起来哪种方式都是用户向前走的方式。蹲伏也是可能的,如在这个场景中所证明的,并且结合耳机碰撞褪色脚本,它可以检测到不想要的碰撞(例如,如果用户在蹲伏时行走时站立)并将其位置重置到最后的已知位置。
018_CameraRig_FramesPerSecondCounter
在耳机视图中心显示每秒帧数的场景。按下触发器会生成一个新球体,按下触摸板会生成十个新球体。最终当存在大量球体时,FPS将下降并展示预制件。
019_Controller_InteractingWithPointer
一个场景,显示控制器指针梁如何用于切换可交互对象上的使用操作。按触摸板激活光束并将其瞄准对象将切换其使用状态。它还演示了如何通过使用捕捉到游戏对象的可交互对象来创建游戏菜单可以触发操作。按应用菜单按钮显示连接到控制器的立方体,该控制器具有菜单选项。将光束指向立方体上的另一个控制器将相应地选择菜单选项。
020_CameraRig_MeshTeleporting
具有网格对撞机的对象的场景,用于演示高度调整传送器如何用于使用网格对撞机上下爬升物体。
021_Controller_GrabbingObjectsWithJoints
具有可伸缩对象集合的场景,该对象附加到具有关节的其他对象。该示例显示Interactable Objects可以具有不同的附加机制,以确定将对象连接到控制器的最佳方式。固定接头适用于保持像立方体这样的物体,因为它们完美地跟踪控制器,而弹簧接头在抽屉上工作良好,在操作时可以使其自然滑动。最后,旋转轨道在门上运行良好,可以自然控制门的摆动。还有一个角色关节对象,可以通过拉动每个相关部分来操纵不同的形状。
022_Controller_CustomBezierPointer
一个场景,演示了Bezier指针如何将复杂的对象传递给它以生成跟踪器光束和指针的光标。在场景中,具有旋转的粒子对象用于演示贝塞尔指针梁的不同外观。
023_Controller_ChildOfControllerOnGrab
一个场景,演示抓取机制,抓取的对象成为控制器抓取的孩子。这适用于需要绝对跟踪控制器的对象,并且在任何情况下都不希望脱节。该对象成为控制器的扩展。现场用弓箭示例演示了这一点,其中弓可以被拾取并跟踪到控制器,而另一个控制器负责拾取箭头以在弓中射击。
024_CameraRig_ExcludeTeleportLocation
一个场景,通过将命名标记应用于对象或应用特定名称的脚本,显示如何通过远程移植来排除某些对象。在场景中,通过在其上ExcludeTeleport设置标记来从传送位置中排除黄色对象,并且通过将ExcludeTeleport附加到其上的脚本排除黑色对象。该ExcludeTeleport脚本没有方法,只是用作占位符。
025_Controls_Overview
一个场景,展示现有的交互式控件,不同的设置方式以及如何对它们发送的事件做出反应。
026_Controller_ForceHoldObject
一个场景,显示如何在游戏开始时抓取对象并防止用户丢弃该对象。场景自动抓住两把剑到每个控制器,并且不可能掉落任何一把剑。
027_CameraRig_TeleportByModelVillage
演示如何在不需要世界指针的情况下传送到不同位置并在表示游戏世界的迷你地图的对象上使用目标事件抽象类的场景。触摸并使用地图上的对象将用户传送到指定位置。
028_CameraRig_RoomExtender
一个场景,通过乘以伴侣边界中的物理步骤来演示扩展物理室空间比例空间的概念。较高的乘数意味着用户可以在游戏区域中进一步行走,并且可以通过按下按钮来切换步行乘数。
029_Controller_Tooltips
演示使用预制件ObjectTooltip和预制件向游戏对象和控制器添加工具提示的场景ControllerTooltips。
030_Controls_RadialTouchpadMenu
演示使用预制件向控制器和其他对象添加动态径向菜单的场景RadialMenu。
031_CameraRig_HeadsetGazePointer
一个场景,演示了将指针连接到耳机的能力,以允许用于远程传输的凝视指针或由世界指针支持的其他交互。的Touchpad右控制器激活所述凝视光束,而Touchpad左控制器上激活从天空为世界指针无人驾驶飞机投射的光束可以附着到任何对象。
032_Controller_CustomControllerModel
演示如何使用控制器的自定义模型而不是默认HTC Vive控制器的场景。它使用两个简单的指针代替默认控制器,并根据是否按下了抓取按钮或使用按钮显示简单的状态更改。
033_CameraRig_TeleportingInNavMesh
一个场景,演示如何使用烘焙的NavMesh来定义允许用户传送到的区域。
034_Controls_InteractingWithUnityUI
演示如何与Unity UI元素交互的场景。场景使用VRTK_UIPointer右侧控制器上的脚本,允许使用简单指针光束与Unity UI元素进行交互。左侧控制器控制耳机上的简单指针,以演示与Unity UI元素的凝视交互。
035_Controller_OpacityAndHighlighting
演示如何更改控制器的不透明度以及如何突出显示控制器元素(如按钮甚至整个控制器模型)的场景。
036_Controller_CustomCompoundPointer
一个场景,演示Bezier指针如何仅在传送位置有效时才能显示对象(传送光束),并且可以沿着跟踪曲线创建动画轨迹。这个场景提供了一个纹理环境,用于测试传送,墙上的一些活跃的“等离子”球体可以用指针激活,另一个球体也可以被抓取和发射。
037_CameraRig_ClimbingFalling
一个演示如何设置具有不同活动的攀爬机制的场景。具有VRTK_InteractableObject组件的各种对象分散在整个级别中。它们都具有GrabAttachMechanic设置为Climbable。
038_CameraRig_CameraRig_DashTeleport
一个场景,显示传送行为,并演示了使用广播的RaycastHit数组的方法。在示例中,破折号方式中的障碍物在破折号正在进行时关闭其网格渲染器。
039_CameraRig_AdaptiveQuality
仅与Unity 5.4及更高版本兼容
场景在耳机视图的中心显示每秒的帧数。此脚本的调试可视化显示在耳机视图的顶部边缘附近。按下触发器会生成一个新球体,按下触摸板会生成十个新球体。最终当存在大量球体时,FPS将丢弃并演示脚本。
040_Controls_PanelMenu
演示如何将可交互的面板预制件附加到游戏对象以提供其他设置的场景。
041_Controller_ObjectSnappingToDropZones
使用VRTK_SnapDropZone预制件为一系列对象设置预定捕捉区域的场景,并演示如何仅将某些类型的对象捕捉到某些区域。
042_CameraRig_MoveInPlace
一个场景,演示用户如何通过以步行方式摆动控制器或通过利用头部摆动运动的现场跑步来移??动和穿越碰撞器。
043_Controller_SecondaryControllerActions
一个场景,演示了使用一个控制器抓取对象的能力,并通过抓取和拉动第二个控制器来缩放它。
044_CameraRig_RestrictedTeleportZones
使用VRTK_DestinationPoint预制件设置预定义传送位置集合的场景。
5.UI交互说明:
1.UI需要添加VRTK_UI canvas
- 手柄处需要添加 VRTK_ControllerEvent,VRTK_Straight Pointer,VRTK_UI Point,VRTK_Point
- 支持Unity原生的Ugui和常用的EventTrigger,也可以使用物体交互模式。
Demo:查看:034
6.物体交互
以上是关于VRTK4.0使用总结UI交互的主要内容,如果未能解决你的问题,请参考以下文章