创建3个空物体,分别命名为SDKManager,left,right
在sdkManager中挂载VRTK_SDK Manager并将left,right挂载在leftController和rightcontroller上
创建子物体Setup上面挂载VRTK_SDK Setup
并将CameraRig和steamvr拖拽为他的子物体
这时点击SDKManger脚本上的AUto Populate将setup脚本挂载
这时设置left,right空物体。挂载上VRTK_Controller Event,VRTK_Pointer(实现于UI的交互),VRTK_Straight Pointer Render(直线激光的各种属性),将最后一个脚本赋值给第二个脚本的PointerRender的属性,此属性下面是选择哪种方式触发射线,按下,或者触摸上时之类的。
此时有个巨大天坑,就是VRTK_sdk Setup取消AUTO Populate,如果勾选自动赋值预制体,那么你就无法发射射线就是这么神奇,一定要将勾去掉
,
上文中在Scripts空物体下创建一个空物体取名playerLand,Vrtk——height Adjust Teleport和VRTK_Dash Teleport两种瞬移方式,注意能瞬移到地方必须有碰撞体,
贝塞尔曲线有时会穿过碰撞体,此时需要勾选贝塞尔曲线中的Cursor Match Target rotate,这时就会紧贴物体
瞬移限制区域的三种方法
挂载一个VRTK_policy放在瞬移脚本的下面,设置他的属性,并把他赋值给瞬移脚本
将场景烘焙后,设置Nav Mesh Limit Distance的值,此值一般为0.5f,表示在可瞬移区域在往不可瞬移区域前进0.5f,若设置为0
表示的是此功能无效,而不是不前进,不能为0
托拽预制体中的DestinationPoint,射线接触到此预制体即可瞬移,修改预制体里面的子物体,改变大小,即可由圆柱改为区域。或者你想要的形状,在为他们添加上collider
贝泽尔曲线各种属性
custom Cursor 指针与碰撞体相交的光标
custom Tracer 构成曲线的元素
Tracer Density 表示构成曲线元素的密度
Cursor Radius 光标的半径
Rescale Tracer 根据距离长短拉伸曲线元素
Valid Location Object 可移动物体
Invalid Location Object 不可移动的物体
Steamvr中的Teleport文件中的model和material有模型和材质可以修改瞬移指针
交互的三种形式: Touch,Grab,Use
在交互物体上挂载VRTK_Interactable Object脚本
is Grabbable ,is useable的勾选表示是否启用此功能
Valid Drop:no drop 表示松开之类操作都不放下物体
drop anywhere 松开掉落在任何地方
drop Valid Snap Drop Zone 掉落在指定区域,如果在附近就会吸附上去
交互物体上挂载VRTK_Interact Controller Appearance
选择在哪种状态下隐藏手柄
交互物体上挂载VRTK_Interact Haptics
物体在哪种状态下发生抖动,
strength On Touch 抖动的力度
Duration On Touch 抖动持续的时间
Interval On Touch 抖动间隔的时间
手柄上要挂载VRTK_Interact Touch,VRTK_interact Grab脚本,这样在触摸和按下手柄部件时才能产生交互
可视化编辑就是在WIndow里的vrtk里面的Setup Interaction Object里面设置属性,完成后点确认,则被你点中的物体自动配置脚本
此时你与交互物体互动时,拿起的角度,位置可能不是很符合设计要求
在交互物体下创造两个空物体位置,可视化窗口配置的有个VRTK_Child of Controller Grab Attach脚本
将两个空物体分配给你想左手,右手交互后的手持位置,在Right Snap Handle。Left Snap Handle
这是角度还是不对的,这时候调整两个空物体的旋转,就是调整手持后物体的旋转
创建一个游玩区域空物体挂载瞬移脚本,并在下面继续挂载VRTK_Player Climb,VRTK_Body Physics
(给物体创建一个物理效果,添加碰撞,重力)
然后给要攀爬的地方创建一个3d物体,大小范围设置为你想要的攀登区域,然后使用可视化窗口配置
将Grab Attach Mechanic改为Climbable,将Add Rigibody取消(取决你有没有这方面需求)然后配置
手柄在此范围即可完成攀登效果
配置窗口选择VRTK_FIXed Joint Grab Attach 他相对于children of Controller有一个Break Force 配置这个脚本的交互物体碰撞到其他碰撞体在多大的力的情况下会脱离手柄,这样更真实
VRTK_Track Object Grab Attach脚本是互动物体距离手柄多少距离会脱离,而他碰到其他碰撞体会被阻挡,但不会脱离手柄,除非距离手柄距离大于你设置的脱离距离
VRTK_Spring Joint Grab Attach脚本是让互动物体与手柄之间仿佛用弹簧链接的效果
开关门效果的实现:
添加Hinge Joint 实现绕轴旋转,观察要旋转的轴,通过改变Axis的x,y,z的值,要绕着哪个轴旋转那么哪个轴的值为1,其他为0。设置spring的属性的spring控制回弹力度
勾选limits,设置最大旋转角度和最小旋转角度
然后在配置界面旋转rotator Track脚本,自动配置
默认配置交互脚本,然后添加VRTK_Outline Object Copy Highlighter就能产生物体边缘高亮,Thickness的值大小决定边缘高亮的宽度
在手柄左右添加脚本VRTK_Controller Highlighter组件,并添加自创脚本Controller Highlight
首先给Trigger的按下和松开绑定事件,其他组件的绑定事件类似
然后按下和松开组件的操作,让按下时Trigger组件变黄,并让手柄透明,手柄松开恢复正常
然后是手柄接触碰撞体的时候,这里写的是手柄接触到碰撞体,手柄主体变黄,并产生震动
这时手柄主体会变黄,不会产生边缘高亮
这时需要在外面的手柄组件上添加VRTK_Outline Object Copy Highlighter脚本,并将他赋值给VRTK_Controller Highlighter的Element Highlighter Overrides里面的Body这时会产生高亮边缘
交互物体配置交互脚本,设置Secondary Grab Attach为Control Direction即为双手持握脚本
双手持握物体,旋转物体的时候,会发现物体会随着自己本身的轴旋转,会脱离手柄旋转
这时我们需要创建一个位置为0,0,0的空物体作为他的父物体,将他的中心位置移动到父物体的位置,然后在拖动父物体继而带动子物体到你想要的位置(左右手握在什么位置的设定上文有描述)这时旋转就会发现不会脱离手柄
配置脚本设为Axis Scale即双手可以改变物体的大小
VRTK_Axis Scale Grab Action的Obsolete Setting是锁定某轴上的大小缩减,勾选既不能在这个方向进行大小变化
创建一个Canvas,设置为world Space。挂载一个VRTK_UI Canvas脚本
脚本中的Auto Active Within Distance 值为0时是不启动的意思,代表手柄离UI距离是多少的时候触发点击效果
手柄上需挂载发射射线的脚本,touch的脚本,还需要在添加一个VRTK_UI pointer的脚本
头部发射射线,手柄只需挂载ControllerEvents脚本即可,在Scripts物体下创建一个新空物体,挂载发射射线,uipointer脚本,这时将射线脚本,和UIpointer脚本中的Controller赋值,你想哪个手柄控制,就拖拽哪个手柄赋值,这时还需要添加一个VRTK_Transform Follow 第一个赋值你的头部的眼睛,第二个赋值你想要改变的物体,这时就把自身拖拽赋值即可(新空物体)。(这时虽然头部关联上了,但是不是很精准)
给交互物体配置的时候勾选is useable然后配置
手柄控制器配置controllerEvents,touch,grab,射线脚本,此外在添加Use脚本,以及VRTK_Interact Use
—unity Events。
将pointer脚本中的interact with objects勾选上
VRTK_Interact use—unity Events上的On Controller Use添加两个监听事件
将Grab脚本拖拽,选择interactGrab.AttemptGrab
将Pointer脚本拖拽,选择pointer.togole,拾取物品后射线消失(防止你松开后瞬移到物体面前,如果你有瞬移功能的话)
(注意用trigger键将物体拾取过来后,是按grip(手柄尾部左右两个按钮)来完成释放)
开关灯设置其实就是重写staruseing方法
手柄配置不变
交互物体无需配置,自创脚本,引入vrtk命名空间,脚本继承VRTK_InteractableObject
重写StartUsing方法即可完成开关
补充远程拾取,勾选pointer脚本中的Grab to point Tip(同时还是要勾选上面的interact with objects)这时物体不会在来到你手中,而是跟随你射线发出的光标的位置移动(感觉就像远程操纵物体一样)
手柄挂载基础脚本外,再挂载VRTK_Object Auto Grab脚本
脚本属性的Object to Grab用你想替代的模型赋值
此时手柄和替代模型就绑定在一起了,我们要想办法让手柄消失
替代模型使用自动配置时,勾选上is useable。注意不需要重力,震动这些脚本,然后挂载VRTK_Interact
Object Appearance脚本,取消勾选Grab Appearance Setting里的Render Visible On Grab即可隐藏,但当你使用手柄时,手柄会出现,则你取消勾选use Appearance Setting里的相同属性
控制动画的播放,扳机的松开,按下事件,也可以通过扳机搬下程度的事件来决定动画播放的进度
手柄上配置基础脚本,将Camerrig里面的左右手的model隐藏,再将替换模型分别推拽为scripts里面左右手的子物体,这时去触摸互动物体有反应,但不能抓取,
此时我们需要在左右手下面创建一个空物体挂载rigbody,取消重力,然后将他赋值给交互抓取脚本的Custom Settings里的Controller Attach Point,这时就能实现抓取功能
在挂载瞬移的脚本上添加VRTK_Headset Collision Fade脚本,VRTK_Headset Fade脚本,VRTK_Headset Collision脚本,这样人物进入碰撞体屏幕就会黑
当你走到一个物体上时,离开物体不会自动下落,你需要添加一个VRTK_Body Physics,只要就会自动下落了