VR中运动控制器的传送系统
创建一个VRPawn
新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它。

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

设置右手的MotionSource为Right。


将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中运动控制器的传送系统的更多相关文章
- VR中为什么需要把游戏音频放在聚光灯里?
VR中为什么需要把游戏音频放在聚光灯里? 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/de ...
- VR中的“寻路(wayfinding)”
虚拟现实(VR)中很重要的一个问题就是Locomotion(用户在VR中的移动).这个Locomotion分为两种,一种是点对点的,如传送门的方式,一种是包含了可以操控的中间过程的,这种被称为“导航( ...
- 什么是VR中的Locomotion?
Locomotion,本文中我称之为移位,是VR研究中最重要的话题之一.因为它属于VR中三大元老级操作(Selection选择,Manipulation操纵物体,Locomotion移位),其中,前两 ...
- 什么是VR中的vection?
Vection是VR领域的一个专有名词,其义指“在虚拟现实中给人带来‘移动’(self-motion)感觉的认知因素”1.也就是说,vection就是指那些给玩家带来“我正在这个虚拟环境中移动”这种感 ...
- phpcms中的RBAC权限系统
PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...
- MAXIMO系统 java webservice 中PDA移动应用系统开发
MAXIMO系统 java webservice 中PDA移动应用系统开发 平时经常用的wince PDA手持设备调用c#写的webservice, 当然PDA也可以调用java webservic ...
- Win8下在Vmware11中安装使用苹果系统OS X 10.10
原文:Win8下在Vmware11中安装使用苹果系统OS X 10.10 近来因为需要做 iOS 的项目,所以需要多花一些时间看看敲敲代码.因为自己手头上并没有 Mac(过年为了闲的时候能玩玩游戏 ...
- SSIS中Sql Task 获取系统变量
原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @var ...
- wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法
wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...
随机推荐
- 使用MapReduce将HDFS数据导入Mysql
使用MapReduce将Mysql数据导入HDFS代码链接 将HDFS数据导入Mysql,代码示例 package com.zhen.mysqlToHDFS; import java.io.DataI ...
- Bootstrap(一)标题
Bootstrap标题样式进行了以下显著的优化重置: 1.重新设置了margin-top和margin-bottom的值, h1~h3重置后的值都是20px:h4~h6重置后的值都是10px.2.所 ...
- Qt之任务栏系统托盘图标
转自 --> http://blog.csdn.net/qivan/article/details/7506306 托盘图标,一个自己脑子出现很久的词,可惜自己都没动手去实现.最近看见的,听见 ...
- 解决xhost: unable to open display ""
首先安装vncserver,如图: 切换账户:sudo su到root下 执行:export DISPLAY=:0.0 执行:xhost +,如图:
- 分享知识-快乐自己:反射机制Demo解析
Java-Reflect专题 基本反射简介: 1):JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象能够调用它的任意方法和属性;这种动态获取信息以及动 ...
- C#winform拖拽实现获得文件路径
1.关键知识点说明: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),在DragDrop事件中对“信息”进行解析.窗体的AllowDrop属性必须设置成true;且 ...
- 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度
来源:http://my.oschina.net/pathenon/blog/65210 1.概述 跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.Mi ...
- 重拾安卓_01_安卓开发环境搭建(android studio)
一.下载安装SDK 参考:搭建Android开发环境——Eclipse 的安装SDK部分 二.安装android studio 参考: Android Studio 入门级教程(一) 三.andro ...
- linux命令学习笔记(10):cat 命令
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示, 或者从标准输入读取内容并显示,它常与重定向符号配合使用. .命令格式: cat [选项] [文件] ...
- CMake简易入门
使用CMake编译 CMake工具用于生成Makefile文件.用户通过编写CMakeLists.txt文件,描述构建过程(编译.连接.测试.打包),之后通过解析该文件,生成目标平台的Makefile ...