创建一个VRPawn

  1. 新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它。

  2. 添加一个Scene命名为CameraRoot
  3. 在CameraRoot节点下添加一个Camera
  4. 在DefaultSceneRoot下添加两个MotionContoller分别对应左手和右手,分别命名为“MotionController_L”和“MotionController_R”同时设置Visualization中的DisplayDeviceModel为True,DisplayModelSource为SteamVR。

  5. 设置右手的MotionSource为Right。

  6. 将VRPawn拖到场景中,并设置

添加并设置导航网格物体

首先要添加一个导航网格物体,它允许我们在导航网格物体覆盖的区域四处走动,要添加导航网格物体,先找到“模式”面板,选择“体积”,在下方找到“导航网格边界”(Nav Mesh Bounds Volume),然后将其拖到场景中。

如果看不到绿色的网格那说明你没开启显示

在其细节设置中找到“笔刷设置”(Brush Setting),改变其XYZ的值直到覆盖场景区域

使用导航网格边界时,所有对象都必须有碰撞组件,这样导航网格才知道哪些区域可以走动。

选中一个物体的静态网格

在这里面设置碰撞

如果还有一些区域是不希望用户可以到达的,可以添加“导航网格物体修改器体积”(Nav Mesh Modifier Volume)

会发现它所在的区域会破坏导航网格物体。所以我们可以调整其大小与位置到一些不希望用户过去的地方。

修改VRPawn

新建两个变量

变量名 类型 描述
bTeleport Bool 是否可传送
teleportLoc Vector 要传送的目标坐标

新建一个函数

这个函数主要的功能就是传送

函数名 getTPDestination

它需要两个参数

参数名 类型 描述
Position Vector 传送的位置坐标
ForwardVector Vector 朝向

连线

右击添加节点,输入并选择“LineTraceByChannel”。

这个节点会从我们所在位置向传送目的地发射出一条射线,用这种方法我们就能在按下某个键时计算出“teleportLocation”的位置。

将Postion与Start连接起来。

要得到End需要通过ForwareVector计算:

将Forware*10000后与Position相加。乘的系数即为射线的长度。

接下来要计算射线击中的对象

拖动“Out Hit” 并选择“Break Hit Result”来展开结构体。

只要我们击中对象就会得到这些信息,但我们只需要用到其中的一小部分信息。

首先要确定“Up的值”,所以我们要用到其中的“Normal”,然后对它使用点积,拖动后,搜索“dot product”:

将Z设置为1

接下来把结果和一个浮点数比较一下,判断点积结果是否比浮点数大。

将float设置为0.9

把判断结果赋值给"bTeleport"

接下来判断是否可以传送

从这里开始我们要使用导航网格物体,回到“Break Hit Result”,拖动“Location”,然后搜索“Project”,选择“ProjectPointToNavigation”

添加“teleportLoc”变量,并选择set,如果可以传送,则把ProjectedLocation赋给teleportLoc。

最后我们在场景中绘制一个调试圆柱体,方便显示传送点在哪里。在set后面继续添加引脚,输入“Draw Debug Cylinder”,将半径设置为50,设置颜色,把宽度改为2。

设置圆柱的高度,回到Break Hit Result”,拖动“Normal”输出引脚,搜索“ *”,它的值决定了圆柱体的高度,我将其设置为10。


接下来将这个Vector与“teleportLoc”相加,并连接Start和End。

记住“Draw Debug Cylinder”只能在开发中使用,打包项目时我们需要用一个更正式的对象来代替它,如一个静态网格体。

事件图表调用

最后我们需要在事件图表中调用函数。

找到Event Tick。

这个事件在场景中的每帧都会触发

定义传送函数

绑定控制器事件

VR中运动控制器的传送系统的更多相关文章

  1. VR中为什么需要把游戏音频放在聚光灯里?

    VR中为什么需要把游戏音频放在聚光灯里? 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/de ...

  2. VR中的“寻路(wayfinding)”

    虚拟现实(VR)中很重要的一个问题就是Locomotion(用户在VR中的移动).这个Locomotion分为两种,一种是点对点的,如传送门的方式,一种是包含了可以操控的中间过程的,这种被称为“导航( ...

  3. 什么是VR中的Locomotion?

    Locomotion,本文中我称之为移位,是VR研究中最重要的话题之一.因为它属于VR中三大元老级操作(Selection选择,Manipulation操纵物体,Locomotion移位),其中,前两 ...

  4. 什么是VR中的vection?

    Vection是VR领域的一个专有名词,其义指“在虚拟现实中给人带来‘移动’(self-motion)感觉的认知因素”1.也就是说,vection就是指那些给玩家带来“我正在这个虚拟环境中移动”这种感 ...

  5. phpcms中的RBAC权限系统

    PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...

  6. MAXIMO系统 java webservice 中PDA移动应用系统开发

    MAXIMO系统 java webservice 中PDA移动应用系统开发  平时经常用的wince PDA手持设备调用c#写的webservice, 当然PDA也可以调用java webservic ...

  7. Win8下在Vmware11中安装使用苹果系统OS X 10.10

    原文:Win8下在Vmware11中安装使用苹果系统OS X 10.10   近来因为需要做 iOS 的项目,所以需要多花一些时间看看敲敲代码.因为自己手头上并没有 Mac(过年为了闲的时候能玩玩游戏 ...

  8. SSIS中Sql Task 获取系统变量

    原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @var ...

  9. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...

随机推荐

  1. Bootstrap(一)标题

    Bootstrap标题样式进行了以下显著的优化重置: 1.重新设置了margin-top和margin-bottom的值,  h1~h3重置后的值都是20px:h4~h6重置后的值都是10px.2.所 ...

  2. linux 新建分区 、格式化 并挂载的命令

    一.新建分区命令为 fdisk /dev/diskname fdisk命令为交互式命令 p:显示当前硬盘上的分区,包括没保存的改动 n:创建新分区 e:表示扩扩展分区 p:表示主分区 d:删除一个分区 ...

  3. ListOperations

    RedisOperations<K,V> getOperations()  V index(K key, long index)  V leftPop(K key)  V leftPop( ...

  4. 机器学习(十九)— xgboost初试kaggle

     1.官网下载kaggle数据集Homesite Competition数据集,文件结构大致如下: 2.代码实战 #Parameter grid search with xgboost #featur ...

  5. python基础-循环语句for\嵌套循环

    for循环格式: for index in range(0,3):#等同于range(3),取0\1\2 print(index) index = 0 starnames = ['xr1','xr2' ...

  6. python习题-替换敏感词

    #3.有一个文件,里面有一些敏感词汇,如下,如果输入这些词,就用**代替,#然后输出,例如输入今天没吃饭,碰到一个傻逼,原来那个sb是小明.输出今天没吃饭,碰到一个**,原来那个**是小明.#需求分析 ...

  7. linux命令学习笔记(38):cal 命令

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历. “阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. .命令格式: cal ...

  8. bzoj1006神奇的国度

    OrzCDQ您太强辣 #include<iostream> #include<cstdio> #include<cstdlib> #include<algor ...

  9. 9th

    2017-2018-2 20179212<网络攻防实践>第9周作业 视频学习 KaliSecurity压力测试工具 压力测试通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能够提供的 ...

  10. CH#56C 异象石 和 BZOJ3991 [SDOI2015]寻宝游戏

    异象石 CH Round #56 - 国庆节欢乐赛 描述 Adera是Microsoft应用商店中的一款解谜游戏. 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图.这张地图上 ...