前言:本文集合了VRTK场景案例以及数篇博客的知识点总结而成,如果你是看不懂专业属于的小白或者是想要轻松了解VRTK44个场景的初学者那么这篇文章肯定适合你,本文运用了大量的白话文注释以及图文结合,使用最新版本VRTK插件,一定是你学习的好帮手
——————————————————————————————————————————
001_CameraRig_VRPlayArea
该场景主要是相机的设置
重点:需要创建一个空物体然后在空物体上挂载组件VRTK_SDKManager
然后将预制体SDKsetups挂载在空物体上
点击一下VRTK_SDKManager的Auto populate自动查找挂上预制体的头显设置
如果相机的位置不好,可以在头显设置里找到CameraRig调整
002_Controller_Events
手柄监听设置需要在挂载的VRTK_SDKManager组件里面将设定好的左3手柄和右手柄指定进去
具体操作:需要两个空物体来搭载监听手柄的组件VRTK_ControllerEvents,然后将两个放置了空物体的组件的物体按照左右手的分类放入VRTK_SDKManager的ScriptAliases对应的槽里面,然后就可以分别在左右手柄的物体下挂载脚本监听手柄的按键了
Action Alias Buttons下面是按键对应指定的事件,可以在加的脚本中添加按键按下后触发别的事件
Pointer Toggle Button:用来开关镭射光标的按钮,默认触摸板按下
Pointer Set Button:用来设置目的地标志的按钮,默认触摸板按下
Grab Toggle Button:用来抓取游戏对象的按钮,默认为手柄按钮
Use Toggle Button:设置使用游戏对象按钮,默认为扳机单击。
UI Click Button:用来点击UI元素按钮,默认为扳机单击。
Menu Toggle Button:用来调出游戏菜单的按钮,默认为应用菜单
003_Controller_SimplePointer
射线的产生
具体操作:在前面添加手柄监听的基础上添加两个组件用来实例化一条射线以及将他渲染出来
添加VRTK_Pointer和VRTK_Straight Pointer Renderer组件然后在产生射线的组件将放置渲染射线组件的物体挂上去,挂在Pointer Renderer处(一般产生射线以及渲染射线都放在一个物体上,所以就是将自身的的物体挂上去就行)
004_CameraRig_BasicTeleport
射线传送
由上一节射线发射出后在创建一个空物体放置移动的组件VRTK_Basic Teleport
按住按键发射出射线后检测如果碰撞到物体那么松开手后就会瞬移到碰撞的位置
参数 1, 射线颜色
2, 眨眼传送速度(直接出现在位置或者走个缓慢熄屏亮屏动画,控制眨眼的时间)
3,传送延迟时间(传送后黑屏多久才可以播放传送动画)
4,以玩家头盔位置为基准进行瞬移
5,设置不可瞬移到达的目标标签,当瞬移射线检测到该类目标时不可瞬移过去
6,限制边缘传送,距离NavMesh寻路算法网格边缘距离
005_Controller_BasicObjectGrabbing
抓取物体
具体操作:在经过第项目二的手柄配置后我们可以给手柄添加两个组件实现手柄抓取物体的效果
VRTK_Interact Touch 和VRTK_Interact Grab挂载在代表左右手的物体上,然后在物体上挂载一个组件代表这个物体可以被抓取VRTK_interactable Obiect,然后将自身挂载在Secondary Grab Action Script上面代表自身可以被抓取,抓取后会默认给物体添加一个组件,后面需要换手操作的话就需要在添加一个组件VRTK_SwapControllerGrabAction
记得将VRTK_interactable Obiect的Is Grabbale勾选上才可以抓取起来
006_Controller_UsingADoo
开门方法运用
具体操作:将门的组成物体放在一个空物体下,给那个空物体挂载一个盒子碰撞器调整为门的大小,将空物体的y轴放在门框处,然后调整碰撞体的位置让他和门的物体一样大(碰撞体用来检测是否碰到门)在空物体上挂载自带开门脚本(此脚本为VRTK_interactable Obiect组件的拓展,沿用了他的功能),然后在手柄对应的物体上添加抓取的两个脚本以及一个开门组件VRTK_Interact Use,在门身上的开门脚本上将Is Usable勾选就可以检测到该组件了
007_CameraRig_HeightAdjustTeleport
升降传送(走到一个比自身当前位置高的位置时会传送到更高的位置上去)
具体操作:在保持项目4直线传送的设置下创建一个空物体用来分类放置升降传送的组件分别是:
VRTK_Body Physics是人头检测方面组件(检测头显在移动时的正常碰撞,就像是真的有个人)
VRTK_Height Adjist Teleport高度传送
要有检测高度才能传送,所以二者一起走
然后将放置组件的空物体自身放入Target List Polic中
三个比较重要的设置:
Height Adjust Settings
Snap To Nearest Floor:设置传送后位置是否漂浮在空中(传送后检测该位置是否有网格碰撞体,如果只是空物体的话就向下寻找最近的物体)
Custom Raycast:某个层的指定射线。
Layers To Ignore:限制不可升降传送的物体标签
008_Controller_UsingAGrabbedObject
同006为VRTK_interactable Obiect组件的拓展,在拓展脚本中输入指定的动作,然后给物体添加VRTK_Fixed Joint Grab Attach和VRTK_Swap Controller Grab Action组件,这样左键可以将物体抓起来(假如拓展脚本中的动作是让物体旋转),右键按下则会让物体旋转
将两个组件挂好后就将物体本身挂在拓展脚本的Grab Attach Mechanic Script和Secondary Grab Action Script处(实际意义是将两个组件挂上去)
009_Controller_BezierPointer
抛物线传送
具体操作:在直线传送的基础上将直线射线的渲染修改成曲线(贝塞尔曲线)的渲染方式就行,其他的不变
010_CameraRig_TerrainTeleporting
复杂地形的传送,与009不同的是创建了一个复杂地形出来然后可以进行复杂地形的抛物线传送
011_Camera_HeadSetCollisionFading
撞墙的时候会黑屏,出墙的范围时屏幕恢复,在001案例将头显设置好后将4个组件挂载在空物体上
在Target List Radius上将自身挂上去就可以出现效果了
Element是忽略碰撞的物体的标签
012_Controller_PointerWithAreaCollision
限制传送位置(有物体的地方不可传送)
在贝塞尔曲线碰到墙壁时射线会变成红色不可传送
需要在设置好贝塞尔曲线传送的时候在手柄上添加一个组件然后将组件挂在贝塞尔曲线的渲染上如图:
VRTK_Play Area Cursor是新挂上去的组件
然后需要在设置传送的空物体上多挂载一个组件VRTK_HeadsetCollision,挂载后会自动出现一个VRTK_HeadsetFade组件,依赖关系然后根据下图调整参数即可:
013_Controller_UsingAndGrabbingMultipleObjects
抓取的拓展,设置的区别,可以设置为按键持续按下抓取或者按一下抓取再按一下停止抓取
如008项目的设置后可以在拓展方法中调整参数设置是否需要持续按下抓取
Hold Button To Grab:是否需要持续按下抓取
Hold Button To Use :是否需要持续按住按键使物体出现动画
014_Controller_SnappingObjectsOnGrab
抓取物体位置以及链接物体方式
我们可以设置抓取物体时指定抓取的对象以及方向(如抓取剑的时候抓取剑柄并且默认向上)
具体操作:在基础抓取剑的基础上增添一个设置抓取位置的组件VRTK_Fixed Joint Grab Attch组件
Precision Grab:是否使用指定抓取
下面两个设置分别是指定左手抓取的部件以及右手抓取的部件
上面的这种抓取的与手柄的链接方式属于吸附性链接(如果发生碰撞就会掉)
下面介绍一种新的链接方式(子物体链接)
手柄抓住后会将被抓取的物体变为手柄的子物体
具体操作:将VRTK_Fixed Joint Grab Attch替换为VRTK_Child of Conteroller Grab Attach后操作如上:
015_Controller_TouchpadAxisControl
在手柄处创建一个脚本监听按键状态,然后在游戏物体上方式一个脚本有各种动作方法,通过获取到游戏物体来使按键发生动作时调用物体上挂载脚本的方法达到控制物体运动的目的
016_Controller_HapticRumble
手柄震动
手柄震动由方法调用,当发生碰撞或检测按下按键时调用特点的方法来使手柄震动
调用VRTK_ControllerHaptics 类的静态方法
017_CameraRig_TouchpadWalking
通过触摸板移动
我们需要通过触摸板移动就需要给手柄物体挂上监测触摸板的组件以及确定根据触摸板移动方式的组件
具体操作:首先我们需要给手柄物体挂上检测触摸板的组件VRTK_Touchpad Control
然后需要在空物体上挂通过触摸板移动的组件(挂在哪个空物体上都行,但是建议在对应的手柄下新建一个空物体挂上去)
手柄的移动方式你分为4种组件:
VRTK_SlideObjectControlAction → 以滑动的方式移动物体,在本场景就是通过触摸手柄圆盘来实现人物平滑移动。
VRTK_WarpObjectControlAction → 它给人的感受就是通过触摸手柄圆盘向一个方向瞬间传送一小段距离,在视野中会有突然眼前一黑的传送效果。
VRTK_RotateObjectControlAction → 通过触摸手柄圆盘来实现平滑旋转。
VRTK_SnapRotateObjectControlAction →通过触摸手柄圆盘向一个方向瞬间旋转一个角度。
VRTK官方给我们的场景里面提供了很多种方案可以使用
我们使用其中一种来讲参数:
在第二排的框中将手柄物体放进去,在第三排设置该方式是x轴移动还是y轴移动
018_CameraRig_FramesPerSecondCounter
场景帧数显示
具体操作:
在资源池中有个预制体,将他拖入场景就行
019_Controller_InteractingWithPointer
射线与物体交互按照前面的交互方式将检测按键以及物体的交互方式(抓取物体拓展脚本)写好后调整拓展脚本的设置
将这里第一个设置以及最后一个设置勾选上后射线射中物体产生的效果同按键触发交互一样
射线的原理是检测到射线后将交互脚本调用出来(将确认使用的勾打上)
020_CameraRig_MeshTeleporting
网格传送
参照之前高低传送同样的设置,在高低不平的网格上也可以进行传送
+
021_Controller_GrabbingObjectsWithJoints
VRTK的多种抓取机制:
VRTK_CustomJointGrabAttach:自定义关节抓取(需要自己添加铰链关节组件)(抓链条)VRTK_FixedJointGrabAttach:固定关节抓取。(抓取的时候生成FixedJoint组件)(轻吸附)VRTK_SpringJointGrabAttach:弹性关节抓取。(抓取的时候生成SpringJoint组件)(重吸附,像拉了一根皮筋,拉到一定程度会断掉)
VRTK_TrackObjectGrabAttach:(统一物理系统跟踪控制器,抓取的时候不会生成铰链关节组件,应该是控制刚体的属性设置。)
VRTK_ChildofControllerGrabAttach:抓取后会直接将操作物体设置为手柄的子物体。(普通吸附)
VRTK_MoveTransformGrabAttach:可以设置xyz的限制,抓取物体的时候只能在这个范围移动(如果给带有有此组件的物体添加刚体,抓取的时候会将iskinematic设置为true,抓取结束为fasle 。这个可以用于手柄拖动物体)。
022_Controller_CustomBezierPointer
贝塞尔曲线特效,顾名思义就是给为贝塞尔曲线加上特效
具体操作:在渲染贝塞尔曲线的组件中将官方给出的特效预制体放入Custom Tracer以及Custom CurSor
023_Controller_ChildOfControllerOnGrab
本场景重点演示的是子物体抓取的方式,也就是将物体抓取后会默认变成手柄的子物体不会被碰撞掉,用于需要强抓取的时候,比如场景中的射箭场景,子物体抓取的实现是在被抓去物体身上添加可以抓取组件的同时添加子物体抓取方式的组件
也就是下面两个组件:
添加完ChildOf Controller后就可以实现子物体抓取了
024_CameraRig_ExcludeTeleportLocations
添加组件根据标签限制传送物体
添加一个空物体,在下面挂载一个VRTK——Policy List脚本,输入不可传送物体的标签,然后将空物体挂到传送组件的Target List Policy位置上检测不可传送标签
上面是传送组件,下面是检测不可传送物体标签组件
025_Controls_Overview
功能插件,如滑动,按钮等等
VRTK_Slider滑动组件
Default Events:给滑动事件设置监听的函数
Interact Without Grab:如果勾选,当被抓取时不能使用滑块
Connected To:滑动条将会跟着这个物体移动,一般不设置
Direction:设定方向,选Autodetect即可
Minimun Limit:最小数值时滑块的位置
Maximum Limit:最大数值时滑块的位置
Minimum Value:滑动条的最小数值
Maximum Valus:滑动条的最大数值
Step Size:滑块滑动的增量值
Snap To Step:当释放滑块时会提前到达附件的一个值(和摩擦力有关)
Released Firction:滑块释放后的摩擦力
VRTK_Konb旋钮
属性与滑动组件相同
VRTK_Lever拉杆组件
VRTK_Door开门组件
Open Inward:这个门能否向内打开
Open OutWard:能否向外打开
Min Snap Close:如果打开的程度小于这个百分比,门将自动关闭
Released Friction:释放后的摩擦力
Grabbed Friction:抓取的摩擦力
Handle Interactable Only:如果勾选,只有门把手部分可以打开门
VRTK_Wheel方向盘组件
Grab Type:抓取方式,TrackObject:转盘会根据手柄位置转动;RotatorTrack:需要手柄抓住转盘才能转动
Locked At Limits:限制转盘的转动角度不能超过最大值
VRTK_Button
按钮组件
Activation Distance:激活按钮的最远距离
Button Strength:按下按钮的强度
在启动工程的时候会伴生一个VRTK_Button_Unity Events
监听脚本需要创建一个新的脚本
026_Controller_ForceHoldObject
工程开始时手上就有抓取的物体并且不掉落
在手柄物体上放置一个组件用来实现开局抓取:
在Object To Grab上将需要抓取的物体放上去
然后调整被抓去物体身上的被抓取组件
将物体自身放入Grab Attach Mechanic Script中
可以调整Valid Drop,No Drop代表不能被放下
027_CameraRig_TeleportByModelVillage
使用与模型交互的方式进行传送
由于与模型交互后传送的是一个新的位置所以高度可能会发生变化,在空物体下就需要高度传送了
手柄需要与控制传送的物体进行交互,那么就需要在手柄上添加一个交互碰撞交互组件和按键检测组件
最后在做交互的物体上挂载一个官方脚本Model Village _Tleport Location
在Destination中放置传送后的位置
028_CameraRig_RoomExtender
游玩区域的拓展,通过现实中人的移动来使虚拟世界中的人移动,可用性不高不建议使用
主要涉及3个组件:
挂载手柄上的:
挂在空物体上的:
029_Controller_Tooltips
给手柄和场景中的物体添加漂浮标签
首先给手柄添加说明标签:需要给手柄添加标签预制体,还有一个检测头显看向哪个手柄的组件(头显看着哪个手柄就会出现标签)
预制体:ControllerTooltips添加在手柄物体的子物体上
组件:VRTK_Headset Controller Aware添加在额为的空物体上
然后是物体标签的设置:将预制体ObjectTooltip挂在物体标签的下方调整大小和位置放在好看的地方
预制体重要参数:
Display Text:标签文本
Draw Line To:挂载的物体
下面的三个颜色设置分别为文字颜色,背景板颜色,连接线颜色
030_Controls_RadialTouchpadMenu
手柄圆盘上的虚拟菜单按钮
与029一样将预制体挂上手柄就行
031_CameraRig_HeadsetGazePointer
根据头部发射射线传送
需要完成几件事情:确认发射射线的位置,实例化射线
创建一个空物体,在空物体上放置一个组件将该物体变为头显的子物体
Sdk Object:设置为谁的子物体
然后放置射线以及射线渲染组件
再放置一个专门的实例化传送标志的组件
在放置一个确认位置的组件
Game Object To Follw放置的是确认射线发射位置的物体(也就是挂载了确认位置组件的物体)
Game Object To Change放置的是自身发射射线的各个组件(也就是挂在了发射射线的组件)
032_Controller_CustomControllerModel
手部模型替换
手部模型替换步骤:
VRTK_Interact Touch:碰撞体替换
VRTK_Interact Grab:Contorller Events刚体替换
模型要求:坐标轴方向正确,有一个空物体用来放置模型整体的碰撞体(如果模型不规则则可以放置两个或多个碰撞体),有一个空物体用来放置刚体组件,这个两个空物体必须都在模型主物体下为子物体
033_CameraRig_TeleportingInNavMesh
在导航网格上限制瞬移距离
在瞬移的组件里面设置
设置Nav Mesh Limit Distance的值,如果为0那么代表不做限制(限制导航网格的位移距离,前提是有导航网格)
034_Controls_InteractingWithUnityUI
UI的交互
想要用vr手柄与UI交互首先需要将UI的渲染方式修改为Word Space就可以在场景中漂浮了
然后在UI上添加VETK_UICanvas组件
然后在与UI交互的物体(手柄,头显)上添加VRTK_UI pointer组件
035_Controller_OpacityAndHighlighting
手柄高亮组件
添加VRTK_Controller Highlighter组件以及VRTK_Outline Object Copy Highlighter后就可以通过脚本的代码获取控制高亮了(这里只做组件以及工程解释,不教具体代码书写)
036_Controller_CustomCompoundPointer
贝塞尔曲线的另一种特效
设置与项目022相同,不过多了两种预制体
1,传送线的样式
2,传送目标点的样式
3,可传送时显示的特效
4,不可传送时显示的特效
037_CameraRig_ClimbingFalling
攀爬
给作为攀爬点的物体添加VRTK_Cimbable Grab Attach攀爬组件
然后将攀爬组件的物体拖入抓取交互组件的Grab Attach Mechanic Script 变量
可以再添加一个VRTK_player Climb组件处理攀爬和自然掉落的情况
038_CameraRig_DashTeleport
另一种传送方式,快速移动
将传送的组件替换为
可以设置Blink Transition Speed(眨眼传送动画时间),将动画设置为0就不会出现眨眼动画,向前快速移动的动画就会明显一些
039_CameraRig_AdaptiveQuality
场景视觉优化
挂载一个组件
作用就是牺牲性能换取画质
040_Controls_Panel_Menu
物体UI显示
在游戏进行的时候游戏中的物体通常会有多种信息,而物体的信息又不能直接显示出来,我们可以在按下特定按键的时候显示特点的UI
首先在物体上添加VRTK_PanelMenuItemController组件用来调用子物体预制体UI
然后将预制体UI拖入下方,在预制体的主空物体上放置了脚本用来调用显示不同的UI
在脚本中放入4个UI分别对应上下左右按键,这样就可以根据按键调用物体不同的UI了
041_Controller_ObjectSnappingToDropZones
放置指定型状物体
在场景中放置预制体SnapDropZone
(这是预制体的构成,也可以创建一个空物体将这些东西放上去效果一样的)
将指定的物体制作成预制体放入Highlight Object Prefab
其他设置
Snap Type:存放采用的方式
Use_Kinematic:运动学方式,物体放上去后不会被移动
Use_Joint:关节方式,物体放上去之后可以被挤开,使用这种方式需要添加关节组件
Use_Panenting:父子关系,物体放上去后会被缩小
Valid Object List Policy:这边可以进一步过滤是否可以存放的物体
042_CameraRig_MoveInPlace
模拟行走的一种方式,人在现实中行走虚拟世界中也会行走
添加这个组件后现实中人原地踏步也可以在虚拟世界中移动
043_Controller_SecondaryControllerActions
双手操作物体的两种情况
1.双手拉伸放大缩小物体
给物体添加VRTK_AxisScaleGrabAction组件
2.长物体需要双手拿起为了美观
添加VRTK_ControlDirectionGrabAction组件
044_CameraRig_RestrictedTeleportZones
指定传送点
指定可以传送的点首先需要给传送的点加限制条件
首先在传送组件上放置VRTK_PolicyList脚本限定传送点
VRTK_PolicyList的两个重要设置补充:
Operation:改变限制方式,只可传送或只不可传送
Check Raycast:检测限制方式(包括层,标签,脚本名称)
由于我们需要在物体上放置一个传送类型的脚本,所以这里我们干脆选择通过脚本名称
然后创建一个物体作为射线检测传送的点,然后在物体上放置VRTK_DestinationPoint脚本
这个脚本不影响本身的传送,但是可以增加传送的功能
参数:
Enable Teleport:是否可以传送
Default Cusor Object:传送点默认的样式
Hover Cursor Object:传送点可传送时的样式
Locked Cursor Object:不可传送时的样式
Snap To Point:快速到达
Hide Point Cursor On:在传送过去的时候隐藏传送点
————————————————————————
以上就是VRTK44个场景的的全部详解,感谢观看