unity VR 基础学习(一)使用瞬移

unity进行VR开发时由于房间的大小问题常常要用到瞬移进行辅助。

在瞬移时主要涉及的脚本有:

1: VRTK_ControllerEvents

2:VRTK_BezierPointer

3:VRTK_Pointer  

4:VRTK_HeightAdjustTeleport  //处理瞬移时角色的高度变化

5:VRTK_BasicTeleport            //处理瞬移移动相关的VRTK_Basic Teleport脚本

其中1、2和3 挂到Controller (left)/(right)中,4和5挂到[CameraRig]中。

 

具体步骤:
(1).将VRTK_ControllerEvents 、VRTK_BezierPointer和VRTK_Pointer 挂到[CameraRig]下的Controller (left)/(right)中。将VRTK_HeightAdjustTeleport和VRTK_BasicTeleport挂到[CameraRig]中就可以瞬移。

(2).在VRTK_ControllerEventsPointer Toggle ButtonPointer Set Button属性中可以设置瞬移发动的按钮,两个属性的之要一样。(默认按钮为圆盘)。

(3).在VRTK_BezierPointerPoint Hit Color Pointer Miss Color属性中可以选择射线碰撞和没碰撞时的颜色。


一、VRTK_ControllerEvents:

脚本可见属性:

设置瞬移按钮:
. Pointer Toggle Button: 这个按钮用于控制一束激光指示线开/关.  //选择射线发射按钮
· Pointer Set Button: 这个按钮用于设置指示线的目标标记.           //松开这个按钮时进行瞬移

抓取开关:
· Grab Toggle Button: 这个按钮用于控制抓取游戏中的物体.

UI控制键:
· Use Toggle Button: 这个按钮用于使用游戏中的物体.
· UI Click Button: 这个按钮用于点击UI元素.


· Menu Toggle Button:这个按钮用于点击弹出游戏内置按钮.
· Axis Fidelity: 坐标变化的精度, 默认为1. 大于2的数字将会导致过于灵敏的结果.

脚本变量:

· public bool triggerPressed - 当trigger被扣下一半左右时为真.
· public bool triggerTouched - 当trigger被扣下一点点时为真.
· public bool triggerHairlinePressed - 当trigger比任何之前扣下的程度多时为真.
· public bool triggerClicked - 当trigger完全扣下时为真.
· public bool triggerAxisChanged - 当trigger位置改变时为真.
· public bool applicationMenuPressed - 当application menu被按下时为真.
· public bool touchpadPressed - 当touchpad被按下时为真.
· public bool touchpadTouched - 当touchpad被触碰时为真.
· public bool touchpadAxisChanged - 当touchpad触碰位置改变时为真.
· public bool gripPressed - 当grip被按下时为真.
· public bool pointerPressed - 当别名为pointer的按钮被按下时为真.
· public bool grabPressed - 当别名为grab的按钮被按下时为真.
· public bool usePressed - 当别名为use的按钮被按下时为真.
· public bool uiClickPressed - 当别名为UI click的按钮被按下时为真.
· public bool menuPressed - 当别名为menu的按钮被按下时为真.
 

脚本事件:
· TriggerPressed - 当trigger被扣下一半左右时发送事件.
· TriggerReleased - 当Trigger从扣下一半的状态释放后发送事件.
· TriggerTouchStart - 当trigger被扣下一点点时发送事件.
· TriggerTouchEnd - 当trigger完全没有被扣下时发送事件.
· TriggerHairlineStart - 当trigger扣下的程度超过了当前的hairline阈值时发送事件.
· TriggerHairlineEnd - 当tringger释放程度超过了当前的hairline阈值时发送事件.
· TriggerClicked - 当trigger在clicked之前扣下的过程中发送事件.
· TriggerUnclicked - 当trigger不再一直处于clicked状态时发送事件.
· TriggerAxisChanged - 当trigger扣下的量发生变化时发送事件.
· ApplicationMenuPressed - 当application menu被按下时发送事件.
· ApplicationMenuReleased - 当application menu被释放时发送事件.
· GripPressed - 当grip被按下时发送事件.
· GripReleased - 当grip被释放时发送事件.
· TouchpadPressed - 当touchpad被按下的时候发送事件(比触摸的按压程度大).
· TouchpadReleased - 当touchpad从被按下(非触碰)的状态下释放时发送事件.
· TouchpadTouchStart - 当touchpad被触摸时发送事件 (不是点击或者摁下).
· TouchpadTouchEnd - 当touchpad不再被触摸时发送事件.
· TouchpadAxisChanged - 当touchpad被触摸的点改变时发送事件.
· AliasPointerOn - 当pointer toggle(别名)被按下的时候发送事件.
· AliasPointerOff - 当pointer toggle(别名)被释放的时候发送事件.
· AliasPointerSet - 当pointer set(别名)被释放时发送事件.
· AliasGrabOn - 当grab toggle(别名)被按下的时候发送事件.
· AliasGrabOff - 当grab toggle(别名)被释放的时候发送事件.
· AliasUseOn - 当use toggle(别名)被按下的时候发送事件.
· AliasUseOff - 当use toggle(别名)被释放时发送事件.
· AliasMenuOn - 当menu toggle(别名)被按下时发送事件.
· AliasMenuOff - 当menu toggle(别名)被释放时发送事件.
· AliasUIClickOn - 当UI click(别名)被按下时发送事件.

--------------------------参考https://blog.csdn.net/weixin_34411563/article/details/87501500------------------------------------------------------

 

二、VRTK_BezierPointer:
这个脚本必须和VRTK_ControllerEvents同时存在。

贝塞尔指针从控制器末端发出一个曲线(由游戏对象组构而成)到(任何高度的)地面上一点。这比简单激光指针要有用的多,因为终点能够弯曲到玩家看不见的对象顶部,所以就可以传送到各种高度的对象上。

脚本可见属性:

· Enable Teleport(启用传送):如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。

 

· Point Hit Color(指针碰撞颜色):当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。

 

· Pointer Miss Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。

 

· Show Play Area Cursor(显示游玩区光标):如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。

 

· Play Area Cursor Dimensions(游玩去光标尺寸):决定游玩区光标和碰撞的尺寸。如果值为零,Play Area Cursor 的尺寸将根据Play Area空间进行校正。

 

· Handle Play Area Cursor Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer Miss Color的颜色且WorldPointerDestinationSet 事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。

 

· Beam Always On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。

 

· Activate Delay(激活间隔):能够再次激活指针光束的延迟时间秒数。用来防止持续传送。

 

· Pointer Length(指针光束长度):在停止前光束投射的距离。射线的最大长度

 

· Pointer Density(指针密度):贝塞尔曲线光束渲染的物体个数。这里数值太高将很可能会因为大量渲染对象来对游戏性能有负面影响。//射线的虚线密度由于每一段都是物体所以密度太大会影响游戏

 

· Show Pointer Cursor(显示指针光标):在光束终点位置的地面显示光标。用来看光束终点位置的高度很有用,它可以通过切换这个来关闭。

 

· Pointer Cursor Radius(指针光标半径):地面指针光标的尺寸,这个值也会影响贝塞尔曲线光束里的对象的尺寸。半径越大,对象尺寸越大。

 

· Beam Curve Offset(光束曲线偏移): 投射光束时应用的高度偏移量,就算在光束径直指向时也能产生一个光滑的曲线。

 

· Custom Pointer Tracer(自定义指针轨迹): 可以在这里设置一个自定义的游戏对象用来代替光束轨迹的默认球体。自定义游戏对象将和控制器的旋转相匹配。

 

· Custom Pointer Cursor(自定义指针光标):  可以在这里设置一个自定义的游戏对象用来代替指针光标的默认球体(虚线组成) 。

.Layers To Ignore :设置射线的碰撞忽略层级,处于这个层级的物体在被射线触碰到时不会触发瞬移

----------------参考自https://blog.csdn.net/root915/article/details/65627785--贝塞尔曲线激光指针(VRTK_BezierPointer)-------------

三、VRTK_HeightAdjustTeleport 

允许根据传送位置是否在其他对象顶部来让 [CameraRig] 改变 y 位置。

用于头盔在瞬移时的显示设置,比如眨眼等。

简本可见属性:
 

· Blink Transition Speed(眨眼淡入淡出速度):可以在基础传送脚本中改变眨眼渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨眼特效呈现。渐变通过 SteamVR Unity 插件脚本里的SteamVR_Fade.cs脚本实现。

 

· Distance Blink Delay(距离眨眼延时): 范围从0到32,这个值决定了基于被传送距离的眨眼过渡保持黑屏的时长。值为0时,任何传送距离都不会延长传送的眨眼过渡,值为32时,就算距离初始点很近的被传送距离都会延长传送的眨眼过渡。这可以被用来模拟用户传送更远的距离花费更长时间。值为16对用户来说就刚好。(决定在传送时头盔的黑屏时间 基于传送距离)

 

· Headset Position Compensation(头盔位置补偿): 如果勾选,传送坐标将会是游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。(传送后玩家在游玩区的相对位置,勾选后头盔在游玩区的相对位置在传送后不会改变)

 

· Ignore Target With Tag Or Class(忽略带有标签或脚本的目标): 一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。

 

· Play Space Falling(游玩区坠落):检查是否玩家是否走出对象,即所在游玩区的位置不在对象上,然后就会自动传送到最近的地面上。

 

------------参考自https://blog.csdn.net/root915/article/details/65627785------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值