CardBoard实现VR的中跳跃效果

作者: Levi_Wan | 来源:发表于2016-12-29 20:56 被阅读113次

    我们在VR中总是靠着头部来浏览场景,当我们想更丰富多彩的与我们所沉浸的世界进行交互,这时我们就需要通过VR手柄或者按键使用我们在世界中的移动。
      使用CardBoard实现在场景中的跳跃。

    首先我们需要知道,CardBoard的交互都是基于Gaze凝视点来实现的。首先第一步,我们就需要获取的我们凝视射线所指向的位置。

    • 我们通过查阅CardBoard的SDK可以知道,Gaze(凝视点)属性可以从CardBoardHead脚本进行获取,并且我们可以看出这条射线是从头部向头部的前方进行发射的。


      Paste_Image.png
    • 将我们的CardboardMain的预制拖拽进我们的场景。并为它添加Player脚本。在脚本中获取CardBoardHead的引用。由于我们的Head上就挂载有CardBoardHead,我们使用GetComponentInChildren<CardboardHead>()来进行获取。
    Paste_Image.png Paste_Image.png
    • 我们可以通过Debug输出Gaze的direction来测试我们正在凝视的方向。

    找到了凝视的方向,这时我们就需要朝我们凝视的方向实现跳跃,这样就需要鼠标点击触发相应的事件,我们也可以通过CardBoard脚本里的OnTrigger事件知道,发生界面的点击时会触发这个事件,现在我们就需要将我们的Jump方法绑定进这个事件。(会发生跳跃肯定也少不了刚体)

    Paste_Image.png Paste_Image.png

    为了避免我们跳跃时发生不必要的旋转导致头晕,我们需要将Rotation进行冻结。

    Paste_Image.png

    我们实现跳跃只需抬头向上,把Gaze的direction对准天上,以这个方向添加力即可,但是这样会使我们的跳跃效果杂乱无章(用户抬头跳跃后在低头看下面的景色很容易出现眩晕)。这里使用固定角度进行跳跃。

    • 首先我们需要获取我们Gaze 射线到“水平方向”上的投影(这里的xz平面)我们使用Vector3.ProjectOnPlane方法
      Vector3 ProjectedVector = Vector3.ProjectOnPlane(GazeHead.Gaze.direction, Vector3.up);

    • Vector3.up(0,1,0)也就是xz平面的法向量。


      Paste_Image.png
    • 得到了位置在xz平面上的方向投影,我们就需要给这个向量设置偏转(它需要偏转多少度(也就是跳跃多少度))使用Vector3.RotateTowards最后把这个方向赋值给velocity并加上速度大小即可。

    • 由于我们的底层计算都是以弧度为单位的,首先我们就需要把我们的角度转成弧度。

    Paste_Image.png Paste_Image.png
    • 跳跃完成:
    Paste_Image.png Jump.gif

    相关文章

      网友评论

      本文标题:CardBoard实现VR的中跳跃效果

      本文链接:https://www.haomeiwen.com/subject/zjupvttx.html