游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

蛮牛译馆

关注:635

当前位置:游戏蛮牛 技术专区 蛮牛译馆

查看: 38012|回复: 1307

[AR/VR教程] 用抛物线的点实现HTC Vive瞬移系统

  [复制链接]  [移动端链接]
排名
1219
昨日变化
1

25

主题

122

帖子

2457

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
8677
好友
11
蛮牛币
841
威望
0
注册时间
2013-11-22
在线时间
714 小时
最后登录
2018-7-18

蛮牛译员

发表于 2016-6-16 21:22:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 caedmom 于 2016-6-16 21:34 编辑

工程下载:
游客,如果您要查看本帖隐藏内容请回复


这个是针对HTC Vive和Unity引擎简单易用的瞬移系统。这个系统是模仿Valve的Vive游戏“The Lab”而作,即玩家可以穿过比游戏区域大的VR环境。下图可以看到对于系统的演示:

未命名-1.gif

提供的这个系统解决了以下问题

1     计算可导航空间:我们显然不希望玩家可以传送出边界,或者在不透明物体内部。为了解决这个问题,这个系统使用了Unity生成的导航网格作为玩家可以传送的边界。因为这个过程包括了Unity的工作,所以它很稳定并且可以放心的应用到大多数工程中。为了预加载这个数据,只需要在场景的任何位置添加一个"Vive Nav Mesh"组件,并且在检视面板点击"UpdateNavmesh Data"按钮。这样无论什么时候更新场景都可以用新的NavMesh烘焙来更新Vive Nav Mesh。上边的过程说明如下图:
002.gif


2    选择瞬移目的地:这个系统通过简单的运动学方程使用了直观的抛物线选择机制。再次说明,这是受到了Valve的“The Lab”启发。用户将控制器举到更高的角度时,选择点会生成的更远一些。如果用户将控制器举过45度(抛物线的最大距离),角度将会锁定在那个距离。
3    表现游戏区域:很有必要知道传送后防护边界在哪里。因此系统围绕防护边界划定了一个盒子。
4    减少不适感:瞬移(显示为“眨眼”)时屏幕的淡入淡出可降低用户的疲劳和眩晕感。

这个Unity工程(版本5.3.4p6)提供了两个简单场景:一个直接集成了SteamVR,另一个适用于没有HTC Vive的小伙伴来演示系统功能。资源代码已经做了文档和注释,或者可以跟随MIT Licence(参照LICENSE.txt)使用.

开始吧
为了使瞬移设置运行需要使用三个组件:
Vive Nav Mesh组件控制Unity的NavMesh系统到可渲染网格的转换。它还会计算NavMesh的边界,所以当玩家选择传送位置时可以被显示出来。
Parabolic Pointer组件生成/显示一个指示网格并从Vive Nav Mesh进行采样。
Vive Teleporter组件控制实际传送机制。它从Parabolic Pointer找出指示数据这样就知道要传送到哪里。当用户决定传送时它还会平稳的淡入淡出屏幕防止带来的不适感。它还可以和SteamVR配合来控制按钮点击事件、控制器管理、触觉反馈,当选择传送位置后还可以显示传送区域边界。

注:Teleport ViveParabolic Pointer组件都会自动添加一个Border Renderer组件。Border Renderer仅仅生成并渲染出显示 ViveNav Mesh边界的网格和SteamVR游戏区域。

第一步:配置Vive NavMesh
003.png

从添加Vive Nav Mesh对象开始,可以在Assets文件夹中的Vive-Teleporter/Prefabs/Navmesh.prefab路径下找到一个预配置的Vive NavMesh。可以将这个对象放在场景层级面板的任何地方和场景中的任何位置。
接下来需要在Unity中烘焙一个导航网格("Navmesh")。这个可以在Navigation窗口中完成(Window > Navigation)。

这里有几点需要考虑:
系统自动剔除斜坡导航网格三角形。这意味着任何没有直接面向上的部分的导航网格都会被传送系统忽略。这个在VR中是合理的,因为玩家不能走上斜坡!

必须在所以可传送表面使用物理碰撞器。抛物线的点(见下边第二步)使用物理射线来确定玩家指向。因此所有可传送表面必须有碰撞器(包括像墙这种不可传送的表面并且要阻止指示)。

为不可传送区域分配不同的导航区域也是个不错的主意。这个对于优化(因此当玩家选择传送位置时系统不需要渲染巨大的预览网格)和游戏平衡(这样玩家就不会传送到地图以外了)很有帮助。

烘焙完导航网格之后(使用Navigation窗口底部的“Bake”按钮),回到之前创建的Vive Nav Mesh 对象。如果决定专用的导航区域(见上方),可以通过Area Mask属性选择那些区域是可传送的。然后点击检视面板中的“Update Navmesh Data”按钮,就会看到导航网格显示在场景视图中。

第二步:配置ParabolicPointer
004.png


接下来添加Parabolic Pointer 对象。可以在Assets文件夹中 Vive-Teleporter/Prefabs/Pointer.prefab路径下找到一个预配置的指针。可以将它放在场景层级面板的任何地方和场景中的任何位置。
你当然可以修改Parabolic Pointer脚本中的任何设置了,不过只允许设置其中的一个:配置从第一步的ViveNav Mesh对象到指针的“Nav Mesh”。

第三步:配置Vive Teleporter
005.png

最后需要为SteamVR Camera添加一个Vive Teleporter (Component > Vive Teleporter > Vive Teleporter)组件。这是用来渲染Vive显示的摄像机。如果是使用了SteamVR 插件中的[CameraRig]预制件则应该将Vive Teleporter 添加给那个预制件中的Camera (eye) 对象。

接下来为组件属性配置以下值:
Pointer将这个设置为第二步创建的Parabolic Pointer 对象。
OriginTransform将这个设置为追踪空间的起点。如果使用了SteamVR插件,这个就是[CameraRig] 游戏对象。当玩家传送时这个对象是实际移动的。
HeadTransform将这个设置为玩家的头部。这个应该是Origin Transform的子集。如果使用了SteamVR插件,这个是Camera (head) 游戏对象。
Navmesh Animator将这个设置为第一步创建的Vive Nav Mesh 对象的动画。
Fade Material将这个设置为Vive-Teleporter/Art/Materials/FadeBlack.mat中的材质
Controllers将SteamVR控制器对象填到这里。如果使用了SteamVR的 [CameraRig] 预制件,则应该将Controller(left)Controller(right) 两个对象填到这里。

原文作者:Flafla2
原文链接:回复可见

申请成为译员+
扫描下方二维码关注游戏蛮牛官方微信~每日都有精选干货与你分享呦~

本文由蛮牛译馆倾情奉献,翻译:xiaojiejie ,如有问题请及时联系,除 合作社区 及 合作媒体 外,禁止转载。

评分

参与人数 14贡献 +10 鲜花 +79 收起 理由
卡徒 + 5
guanghui + 1 很给力!
S_xiaodong + 2 很给力!
YuShow + 2
高和顺 + 2 赞一个!
OKBang001 + 2
海凤 + 2 很给力!
jjkh + 2 很给力!
yoyovr + 2 赞一个!
ltf888 + 2 赞一个!
我要成大神 + 2
CloudHu + 5 赞一个!
一曲流心 + 50 很给力!
caedmom + 10 很给力!

查看全部评分


回复

使用道具 举报

4四处流浪
448/500
排名
8881
昨日变化
1

2

主题

91

帖子

448

积分

Rank: 4

UID
114524
好友
1
蛮牛币
413
威望
0
注册时间
2015-7-21
在线时间
237 小时
最后登录
2018-7-19
发表于 2016-6-16 22:45:32 | 显示全部楼层
谢谢大神,感激不尽

回复 支持 反对

使用道具 举报

5熟悉之中
573/1000
排名
4086
昨日变化

0

主题

36

帖子

573

积分

Rank: 5Rank: 5

UID
110413
好友
0
蛮牛币
841
威望
0
注册时间
2015-6-25
在线时间
215 小时
最后登录
2018-5-11
发表于 2016-6-17 08:38:00 | 显示全部楼层
66666666666666666

回复 支持 反对

使用道具 举报

7日久生情
3715/5000
排名
95
昨日变化

4

主题

271

帖子

3715

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1564
好友
2
蛮牛币
5796
威望
0
注册时间
2013-8-5
在线时间
1091 小时
最后登录
2018-5-15
发表于 2016-6-17 08:47:04 | 显示全部楼层
大神果然是大神啊,牛

回复 支持 反对

使用道具 举报

5熟悉之中
637/1000
排名
4660
昨日变化
1

4

主题

140

帖子

637

积分

Rank: 5Rank: 5

UID
75135
好友
1
蛮牛币
359
威望
0
注册时间
2015-2-17
在线时间
213 小时
最后登录
2017-10-25
发表于 2016-6-17 08:58:39 | 显示全部楼层
救星啊正在做这个demo   谢谢楼主分享

回复 支持 反对

使用道具 举报

5熟悉之中
637/1000
排名
4660
昨日变化
1

4

主题

140

帖子

637

积分

Rank: 5Rank: 5

UID
75135
好友
1
蛮牛币
359
威望
0
注册时间
2015-2-17
在线时间
213 小时
最后登录
2017-10-25
发表于 2016-6-17 08:58:56 | 显示全部楼层
救星啊正在做这个demo   谢谢楼主分享
[发帖际遇]: 一个袋子砸在了 球球1314 头上,球球1314 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1080/1500
排名
2501
昨日变化

30

主题

160

帖子

1080

积分

Rank: 6Rank: 6Rank: 6

UID
129231
好友
3
蛮牛币
1220
威望
0
注册时间
2015-11-18
在线时间
374 小时
最后登录
2018-4-13
发表于 2016-6-17 09:06:00 | 显示全部楼层
感谢楼主分享

回复

使用道具 举报

排名
3185
昨日变化
1

14

主题

109

帖子

1247

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
78629
好友
5
蛮牛币
443
威望
0
注册时间
2015-3-10
在线时间
432 小时
最后登录
2018-7-1

蛮牛译员

发表于 2016-6-17 09:10:56 | 显示全部楼层
小姐姐赶紧发个源码剖析的开发者干货帖子

回复 支持 反对

使用道具 举报

排名
291
昨日变化

3

主题

532

帖子

3436

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
19942
好友
6
蛮牛币
3688
威望
0
注册时间
2014-4-2
在线时间
1139 小时
最后登录
2018-7-20
发表于 2016-6-17 09:12:12 | 显示全部楼层
666666

回复

使用道具 举报

6蛮牛粉丝
1040/1500
排名
2342
昨日变化
1

1

主题

101

帖子

1040

积分

Rank: 6Rank: 6Rank: 6

UID
132777
好友
2
蛮牛币
1174
威望
0
注册时间
2015-12-28
在线时间
388 小时
最后登录
2018-7-23
发表于 2016-6-17 09:13:02 | 显示全部楼层
来学习学习,帮大忙了

回复 支持 反对

使用道具 举报

4四处流浪
313/500
排名
13006
昨日变化

0

主题

68

帖子

313

积分

Rank: 4

UID
22396
好友
2
蛮牛币
0
威望
0
注册时间
2014-4-22
在线时间
184 小时
最后登录
2018-3-1
QQ
发表于 2016-6-17 09:26:43 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

回复

使用道具 举报

3偶尔光临
173/300
排名
32434
昨日变化
7

3

主题

49

帖子

173

积分

Rank: 3Rank: 3Rank: 3

UID
5610
好友
1
蛮牛币
1195
威望
0
注册时间
2013-10-14
在线时间
105 小时
最后登录
2018-7-6
发表于 2016-6-17 09:35:36 | 显示全部楼层
niubiniubiniubinibu

回复 支持 反对

使用道具 举报

7日久生情
1811/5000
排名
1585
昨日变化

4

主题

307

帖子

1811

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
98190
好友
3
蛮牛币
3527
威望
0
注册时间
2015-5-7
在线时间
766 小时
最后登录
2018-7-23
发表于 2016-6-17 09:37:03 | 显示全部楼层
还行,试下看看!

回复

使用道具 举报

4四处流浪
382/500
排名
8796
昨日变化

1

主题

50

帖子

382

积分

Rank: 4

UID
150617
好友
2
蛮牛币
109
威望
0
注册时间
2016-6-2
在线时间
211 小时
最后登录
2018-7-20
发表于 2016-6-17 09:37:51 | 显示全部楼层
分析的不错,unity商店有个插件也不错,不过收费
[发帖际遇]: mnglong 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2730/5000
排名
541
昨日变化

2

主题

252

帖子

2730

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
127556
好友
0
蛮牛币
6677
威望
0
注册时间
2015-11-2
在线时间
1102 小时
最后登录
2018-7-23
发表于 2016-6-17 09:41:11 | 显示全部楼层
用抛物线的点实现HTC Vive瞬移系统

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表