贝塞尔曲线激光指针(VRTK_BezierPointer)

- 转载 :原文链接:http://www.chinaar.com/ZYJC/1434.html


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

激光束默认按控制器上的抓握键Grip来激活。事件侦听AliasPointer别名事件,所以Pointer Toggle

button可以通过在VRTK_ControllerEvents 脚本中改变Pointer Toggle button来进行选择设置。

贝塞尔指针脚本被添加到[CameraRig]预制里的控制器对象上,控制器对象同时需要添加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(自定义指针光标):  可以在这里设置一个自定义的游戏对象用来代替指针光标的默认平柱体。

贝塞尔指针对象扩展自VRTK_WorldPointer 抽象类并因此发出相同的事件和有效数据。

VRTK_BezierPointer脚本的例子参见SteamVR_Unity_Toolkit/Examples/009_Controller_BezierPointer场景,它被连同Height

Adjust Teleporter脚本一起使用,来显示怎样可以不需要看到对象的顶部就能使用曲线指针来传送到不同高度的对象上。

另一个例子可以参见SteamVR_Unity_Toolkit/Examples/012_Controller_PointerWithAreaCollision场景,这里演示了一个开启了游玩区光标和碰撞检测的贝塞尔指针怎样被用来穿过游戏区域,但是不允许传送到墙壁或者其他对象的区域而导致游玩区让玩家穿进墙壁。

贝塞尔曲线生成的代码是另一个脚本,位置在SteamVR_Unity_Toolkit/Scripts/Helper/CurveGenerator.cs,这基本是受Catlike

Coding的教程和代码的启发(http://catlikecoding.com/unity/tutorials/curves-and-splines/)。

你可能感兴趣的:(贝塞尔曲线激光指针(VRTK_BezierPointer))