一个物体使用例子,涉及到一些VRTK预设好一些脚本,
VRTK_Slider,继承自VRTK_Control,滑动条相关
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_Control_UnityEvents这个脚本用于给控制事件设置监听,挂载继承自VRTK_Control的脚本后会在场景允许后自动挂载上这个脚本,也可以自己去手动在场景还没有开始前添加这个脚本,需要注意的是监听函数的参数是固定写法,使用这个脚本去设置监听函数可以获取一些详细的数值
VRTK_Knob,径向旋钮相关
相关属性和滑动条脚本相同,在代码里面设置监听函数同滑动条
VRTK_Chest,带一个盖子的柜子,控制盖子的打开程度
Lid:盖子部分
Base:柜子的主要部分
Handle:把手部分
Content:柜子内部的物品部分
Hide Content:当柜子盖上时柜子内的物品不可见
Max Angle:最大的打开角度
在代码里面设置监听函数同滑动条
VRTK_Drawer,抽屉相关
Min Snap Close:如果拉开的程度小于这个百分比,柜子将会自动合上
Max Extend:最大能拉开的程度
在代码里面设置监听函数同滑动条
RTK_Button,按钮相关
Activation Distance:激活按钮的距离
Button Strength:按下按钮的强度
在代码里面设置监听函数:
VRTK_Button_UnityEvents,这个脚本是VRTK_Button配套使用的
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_ObjectAutoGrab,使用这个脚本,手柄控制器会在一开始就自动抓取一个物体
Object To Grab:要被抓取的物体
Object Is Prefab:被抓取的物体是否是预制体或是场景中已经存在的物体
Clone Grabbed Object:复制被抓取的物体
Always Clone On Enable:总是采用复制的方式获取物体
通过使用物体瞬移,一些物体会一直跟随着瞬移
涉及的脚本
VRTK_TransformFollow,使用这个脚本,可以指定一些物体跟随瞬移
将要跟随瞬移的物体放到挂在了这个脚本的物体的下面,或者将这些物体的父物体指定给Game Object To Change这个属性
Follows Position:启用位置跟随
Smooths Position:平滑位置,自动调整
Follows Rotation:瞬移是转动角度也会跟随
Follows Scale:缩放大小也会跟随
Moment:选中时机,之前、同时或之后
ModelVillage_TeleportLocation,将这个物体挂载在一个物体上可以实现点击瞬移
Destination:指定瞬移的位置点
扩展游玩区域的例子,适用性不高,不建议使用
涉及脚本:
涉及的脚本有三个
为手柄和物体加上小贴士的例子
涉及到两个个预制体和一个脚本:
HeadsetControllerAwareEventArgs脚本,使用这个脚本,能够在头盔朝向手柄控制器时被手柄控制器获知,配合上面的预制体使用,即可实现在头盔朝向哪个手柄控制器时就在哪个控制器上显示提示
使用方式:
ControllerGlanceEnter事件:当手柄模型有不可见变为可见时被执行
ControllerGlanceExit事件:当手柄模型由可见变为不可见时被执行
ControllerTooltips预制体,需要放置在控制器下面,可以为最原始的手柄模型加上提示
ObjectTooltip预制体,放在物体下面,可以为游戏物体加上提示
手柄TouchPad菜单实例
涉及到一个预制体
RadialMenu预制体,sample中介绍了两种使用方式
菜单显示在手柄模型上:
Button:设置按钮的个数,可以在内部为每个按钮设置不同的图片和各种事件的监听
Button Prefab:按钮面板的样式,默认是一个环形
Button Thickness:环的宽度
Offset Distance:偏移的距离
Offset Rotation:偏移的角度
Icon Margin:图标的边缘距离
Hide On Release:释放时隐藏
Execute On Unclick:释放按钮是是否执行事件
Base Haptic Strength:选择不同按钮时的震动
Menu Buttons:使用真实的button构成环形菜单
菜单显示在其他地方:
放置在其他地方的菜单使用的控制脚本是不一样的,
VRTK_IndependentRadialMenuController,这个脚本继承自RadialMenuController
Add Menu Collider:为菜单添加collider,这个最好加上,否则菜单无法与手柄碰撞
通过视野中心点选择瞬移点的例子
没有新的脚本内容,以上各脚本的具体配置详解example
实例说明如何替换手柄模型,并使用物品
将各自的模型放置到对应的控制器下面,记住需要在VRTK_SDK Manager这边的这两个地方进行配置,手柄模型必须在一开始就在场景里面,位置也要设置好
其他的使用物体上和采用原始的模型没有什么区别
限制在导航网格上面的瞬移距离
使用射线与UI进行交互,介绍了三种使用例子
与普通的UGUI交互
Canvas的渲染方式需要修改成World Space,为Canvas添加VRTK_UICanvas脚本即可
Auto Activate Within Distance:UI自动激活的距离,即使射线没有出现的时候
键盘UI:
添加这两个脚本即可VRTK_UICanvas和UI_KeyBoard
UI_KeyBoard脚本是sample里面的脚本
拖拽UI:
设置存放UI的容器
VRTK_UIDropZone,只需这个脚本即可,但是为了可以让存放在里面的UI可以自动被整理,还需要添加上Grid Layout Group脚本
设置可以被拖拽的UI
VRTK_UIDraggableItem,添加这个脚本后,这个UI控件就可以在这个Canvas里面被拖拽了
Restrict To Drop Zone:在保存空间内排序
Restrict To Original Canvas:在画布内排序
手柄模型高亮的实例,各个按键都可以被高亮,还有为手柄单个按键设置tip
涉及的脚本:
VRTK_OutlineObjectCopyHighlighter:
添加了这个脚本后就可以在代码里面获取控制高亮了
一个酷炫的贝塞尔传送曲线的示例
没有什么新的内容,主要是对贝塞尔曲线渲染器的配置,具体看sample
一个处理各种攀爬和掉落的示例,做攀岩游戏必备
涉及的脚本:
VRTK_PlayerClimb,这个脚本可以处理各种攀爬和自然掉落的情况,需要其他脚本在同一个物体上,具体见sample
VRTK_ClimbableGrabAttach,在可以被攀爬的物体上除了要添加交互抓取必须的脚本外还需要添加这个脚本
让瞬移有个过程,像直接冲过去一样
涉及的脚本:
VRTK_DashTeleport
添加这个脚本就可以实现这个效果
还有一个sample里面提供的脚本RendererOffOnDash,被挂载在游戏物体上,作用应该是在瞬移冲锋的时候停止渲染该物体,实例里面是在所有的游戏物体上都添加了这个
一个优化的例子
涉及的脚本:
VRTK_AdaptiveQuality,挂载这个脚本,游戏会根据GPU的负荷去调整渲染的效果,简单说就是用画质换性能
一个控制物体上面板菜单的实例
PanelMenu预制体:
将其放入需要产生PanelMenu的游戏物体中
在预制体的最上层有个PanelMenuController脚本,在这里可以为手柄TouchPad的四个方向指定相应出现的Panel,默认的使用方式是拿起物体,按下TouchPad的四个方向的按键即可
指定的Panel需要挂载有PanelMenuItemController脚本
在Panel的子物体上的脚本就可以通过代码去给Panel显示期间的各个按钮事件去指定监听
一个物体放置的示例,可以指定可以放的物体
涉及的内容:
SnapDropZone预制体,这个预制体可以用来制作存放物品的栏位
VRTK_SnapDropZone,主要脚本,用来指定物体是实现效果
Highlight Object Prefab:指定可以存放的物体,直接将物体的预制体拉进去即可
Snap Type:存放采用的方式
Use_Kinematic:运动学方式,物体放上去后不会被移动
Use_Joint:关节方式,物体放上去之后可以被挤开,使用这种方式需要添加关节组件
Use_Panenting:父子关系,物体放上去后会被缩小
Valid Object List Policy:这边可以进一步过滤是否可以存放的物体
VRTK_HipTracking,可以制作随人物移动的格子
模拟正常移动的一个示例,按下TouchPad,人体在原地踏步即可前进(头部晃动即可),配合万向走步机使用更佳
添加这个脚本就可以
双手同时操作物品的示例
涉及的脚本:
VRTK_AxisScaleGrabAction
使用这个脚本,使用双手可以将物体放大缩小
VRTK_ControlDirectionGrabAction
使用这个脚本,两只手可以拿起同一个物体,一般用于长物体
设置一些指定的点才能够瞬移
先使用VRTK_PolicyList脚本限定传送点
在使用VRTK_DestinationPoint脚本,设置传送点的属性,这个脚本需要被挂载到每一个传送点上
Enable Teleport:是否可以传送
Default Cusor Object:传送点默认的样式
Hover Cursor Object:传送点可传送时的样式
Locked Cursor Object:不可传送时的样式
Snap To Point:快速到达
Hide Point Cursor On:在传送过去的时候隐藏传送点
OK,今天的讲解就到这里,以后我会经常带给大家VR的知识