Unity强化篇(二) —— 适用于Unity的HTC Vive教程(一)

版本记录

版本号 时间
V1.0 2019.02.13 星期三

前言

Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至WindowsMacWiiiPhoneWebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。网页游戏 坦克英雄和手机游戏王者荣耀都是基于它的开发。感兴趣的看下面几篇文章。
1. Unity强化篇(一) —— 如何使用Vuforia制作AR游戏(一)

开始

首先看下写作环境

C#4, Unity 2018.2, Unity

HTC Vive是由HTCValve Corporation开发的虚拟现实headset。它可以让您进入虚拟世界并亲身体验它,而不是通过屏幕上的头像。

如果您是Unity开发人员,将HTC Vive虚拟现实游戏制作成您自己的游戏很容易 - 您甚至可以说HTC ViveUnity是天作之合。

在本HTC Vive教程中,您将学习如何将HTC Vive集成到您自己的Unity游戏中。具体来说,您将学习如何:

  • 下载并配置SteamVR
  • 处理控制器的输入。
  • 在VR中与物理对象交互。
  • 制作激光笔。
  • 传送一个区域。

在本HTC Vive教程的最后,您将拥有一个沙盒,可以进行进一步的实验。现在是时候开始吧!

注意:戴头戴式显示器时,每个人对移动和旋转的反应都不同。如果这是你的第一次,请自己动手,如果你感到恶心或不舒服,请休息一下。大多数人都习惯了VR。如果你在前几次感觉不舒服,不要担心 - 它可能会过去。

在深入学习本教程之前,请确保您具有以下内容:

  • 支持VR的Windows PC
  • 您机器上安装的copy of Unity 2018.2.14或更新版本的副本。
  • 安装了所有硬件并配置和更新软件的HTC Vive or HTC Vive Pro
  • 已安装SteamSteamVR。 请参阅本指南this guide,该指南将指导您完成硬件设置并提供下载Steam和SteamVR的链接。
  • 基本的Unity知识。
  • 对脚本的基本了解。
  • 打开并连接的HTC Vive

在Unity中打开准备好的starter文件夹。 在Project窗口中查看RW的内容:

每个文件夹都作为特定资源的基本文件夹:

  • Materials:用于场景的材料,包括蓝色弹力球。
  • Models:所有模型。
  • Physics Materials:弹性球物理材料。
  • Prefabs:松散的物体预制件。
  • Scenes:游戏场景就在这里。
  • Scripts:所有脚本。
  • Textures:场景中所有对象共享的单个纹理。

打开Game场景。 查看场景视图,然后单击play以尝试游戏:

目前,没有太多事情发生,因为现场还没有VR装备。 您需要将SteamVR添加到项目中以将Vive连接到Unity


Setting Up SteamVR

SteamVR SDKValve制作的官方库,可以更轻松地为所有主要的VR headsets开发。 它目前在资源商店免费,并支持Oculus RiftHTC Vive等等。

在顶部栏中选择Window> General> Asset Store打开Asset Store

加载商店后,在顶部的搜索区域中键入SteamVR,然后单击Enter。 向下滚动一下以查看选择的资源。 单击SteamVR Plugin以打开其商店页面:

单击Download并给它一点时间。 完成后,单击Import以打开包导入对话框。 单击此窗口右下角的Import以导入包:

注意:在导入结束时,您可能会看到以下消息,具体取决于您的Unity版本:

单击I Made a Backup按钮,让编辑器更新并重新编译脚本。

几秒钟后你会看到这个窗口:

这是SteamVR插件的一部分;它显示了您可以改进的编辑器设置,以最大限度地提高性能和兼容性。

当您打开一个新项目并导入SteamVR时,您会看到很多条目。 由于入门项目已经过很好的优化,因此这里唯一的建议是禁用解析对话框。

单击Accept All以执行所有建议的更改。 关闭Asset Store并切换回Scene视图。 您现在将在Project窗口中有一个名为SteamVR的新文件夹:

打开SteamVR文件夹,查看里面的文件夹。 您将从Prefabs文件夹中将一些必要的VR GameObjects添加到场景中。

选择[CameraRig][SteamVR]并将它们拖到Hierarchy中:

[SteamVR]附加了一个Steam VR_Render组件,用于处理所有VR摄像机的渲染。

[CameraRig]更有趣,因为它控制着Vive的headset和控制器。 选择[CameraRig]并在Inspector中将其Position设置为(X:0,Y:0,Z:-1.1),以便在桌子后面滑动整个装备。

从层次结构中删除Main Camera,因为它会干扰[CameraRig]及其嵌入式摄像头。

HMD置于触手可及的范围内,打开控制器并启动场景。 拿两个控制器并将它们摆动一下。 您会注意到在Scene视图中看到虚拟控制器在四处挥手:

一旦SteamVR插件检测到控制器,它就会创建这些虚拟版本。 控制器映射到[CameraRig]的两个Controller子节点:

现在,在仍然运行场景的同时,在层次结构中选择Camera,并通过顶部带子小心地拾取头戴式显示器。 移动并旋转一下,然后观察Scene视图:

Camera与头戴式显示器相连,可精确跟踪每个现实生活中的移动和旋转。

现在,将头戴式显示器放在头上,抓住控制器,然后环顾四周,感受一下房间。

如果您尝试与对象进行交互,您会感到失望,因为没有任何反应。 要添加移动跟踪之外的功能,您需要执行一些脚本编写。


Handling Input

拿一个手中的控制器,给它一个合适的外观。 每个控制器都有以下输入:

除了上面的输入,每个控制器在移动和旋转时也具有速度和旋转速度;这在与物理对象交互时证明特别方便。

1. Defining Actions

SteamVR 2.0版开始,Valve已经用输入系统取代了输入系统的传统1:1硬件映射。 这在硬件和Unity之间增加了一层抽象。

操作系统允许您考虑用户操作,而不是需要轮询哪些按钮或触发器进行输入。 SteamVR计算出用于给定操作的输入。

通过在顶部菜单中选择Window> SteamVR Input打开SteamVR Input窗口。

出现下面的窗口,询问您是否要将一些示例文件复制到项目中。 选择Yes

这会在项目的根目录中创建几个JSON文件:

actions.json文件包含所有操作,操作集和对默认绑定的引用。 其他JSON文件包含每个操作的默认绑定。 幸运的是,您不必手动编辑这些内容。

查看SteamVR输入窗口;这包含所有操作集和操作:

该窗口包含一些重要的部分和按钮:

  • 1) The action sets:此处的按钮就像选项卡一样在各set之间切换。
  • 2) Actions:默认的操作集,包括输入和输出。您可以在此处添加,编辑和删除操作。
  • 3) 此按钮将所有操作集和操作保存到JSON,并生成许多帮助程序类,以便轻松访问操作。
  • 4) 该按钮打开一个本地托管的Web页面,允许您将操作绑定到硬件。

您可以在此处定义多个actions sets,每个操作集都包含一系列操作。您可以将每个输入操作分类为以下类型之一:

  • Boolean:打开或关闭true或false的操作。使用示例:抓住。
  • Single / Vector1:值介于0和1之间的操作。示例用法:移动速度。
  • Vector2:X和Y值介于0和1之间的动作。示例用法:方向。
  • Vector3:X,Y和Z值介于0和1之间的动作。这些动作非常罕见。
  • Pose:表示3D空间中位置和旋转的动作。这些操作用于跟踪VR控制器和HMD
  • Skeleton:使用SteamVR Skeleton Input系统估算拿着VR控制器时玩家手指的位置的动作。无论控制器的跟踪保真度如何,这都为每个手指提供关节位置和旋转。

最后,还有一个输出动作:振动(vibration)。您可以使用此操作使控制器振动。

是时候编辑动作了!

单击platformer按钮和mirrored下拉列表旁边的减号按钮以删除platformer操作集:

出现确认窗口时,选择Delete

对于有buggy action set做同样的事情;您只需要为本教程设置的默认操作。

接下来,通过删除以下操作来清理操作列表。 逐个选择它们,然后单击右下角的减号按钮:

  • InteractUI
  • GrabPinch
  • Pose
  • Squeeze

接下来,选择GrabGrip操作并通过编辑其Name字段将其重命名为Grab

创建所有操作后,单击左下角的Save and generate保存操作并生成一堆帮助脚本和可编写脚本的对象,以便于访问。

片刻之后,输入系统完成,并将新的SteamVR_Input文件夹添加到Assets文件夹:

该文件夹包含生成器创建的文件。 更具体地说,脚本和可编写脚本的对象。

2. Binding Actions

现在您已定义了操作,您可以为它们创建默认的硬件绑定。

确保SteamVR正在运行并且您的Vive控制器已打开。 接下来,单击右下角的Open binding UI。 将在您的默认浏览器中打开本地托管的网页:

首先,如果您连接了游戏手柄或其他兼容硬件,则需要先切换到Vive Controller绑定。 例如,单击Gamepad,然后选择Vive Controller切换到控制器设置。

接下来,在Current Binding标题下,单击Edit以进入绑定菜单。

绑定编辑器现在显示在屏幕上。 快速浏览一下。 您可以在此处将操作可视地绑定到硬件。

由于镜像,您只需要设置左控制器,这些设置将复制到另一侧。 您可以通过取消选中屏幕底部的Mirror Mode复选框来更改此设置。 尽管如此,为了本教程而保留镜像。

如果您查看屏幕左侧并向下滚动,您会注意到已经有一些输入链接到操作:

要从一个干净的平板开始,将鼠标悬停在每个已定义的输入上,然后单击垃圾桶图标将其删除。 出现确认提示时,选择Delete

下面是结果

现在,通过单击其名称旁边的大加号按钮并在弹出的窗口中选择BUTTON,为Grip定义一个新的Button绑定。

这使您可以像按钮一样使用grip(就是这样)。 现在,单击Click事件旁边的None以将操作链接到它。 弹出一个窗口,其中包含可能的操作列表。 选择grab以链接它。

在定义新输入时就是这样! 现在,每次在游戏运行时按下grip按钮,都会触发grab动作。

单击输入条目左下角的Apply以将其保存到操作集。

现在对TriggerTrackpad执行相同的操作:为每个触发器创建一个新的Button输入,将TriggerClick事件链接到Trackport并将TrackpadClick事件链接到Teleport。 完成后一定要保存这些。

结果如下:

而已! 绑定已设置。 单击Replace Default Binding以将这些设置应用于默认配置文件。

在下一个窗口中,单击左下角的Save以将默认绑定保存到磁盘。

当玩家开始游戏时,会应用此绑定。 如果玩家的特定硬件没有绑定,则会提示他们自己设置这些绑定。

关闭Binding UI选项卡或窗口,返回Unity编辑器并关闭SteamVR Input窗口。 是时候把这个绑定好用了!

3. Using Actions

通过创建并绑定到硬件输入的操作,您现在可以在游戏中最终使用这些操作!

首先选择控制器的Pose Actions;这将物理控制器的位置和旋转链接到虚拟控制器。

展开Hierarchy中的[CameraRig]并选择Controller (left)

将其Pose Action更改为 \actions\default\in\SkeletonLeftHand,将其链接到左侧控制器。

现在对Controller (right)执行相同操作,但将其Pose Action更改为\actions\default\in\SkeletonRightHan

接下来,在RW \ Scripts中创建一个新的C#脚本,将其命名为ActionsTest并在您喜欢的代码编辑器中打开它。

删除Start()方法并将以下内容添加到文件的顶部:

using Valve.VR;

这引用了访问VR输入类所需的命名空间。

接下来,在Update()上面添加以下内容:

public SteamVR_Input_Sources handType; // 1
public SteamVR_Action_Boolean teleportAction; // 2
public SteamVR_Action_Boolean grabAction; // 3

使用此代码,您做了:

  • 1) 轮询输入的手的类型。 这些是All, Left or Right
  • 2) 引用Teleport动作。
  • 3) 引用Grab行动。

现在,在Update()下面添加以下方法:

public bool GetTeleportDown() // 1
{
    return teleportAction.GetStateDown(handType);
}

public bool GetGrab() // 2
{
    return grabAction.GetState(handType);
}

以下是这些内容:

  • 1) 如果Teleport操作刚刚激活则进行轮询,如果是这种情况则返回true
  • 2) 如果Grab操作当前已激活,则轮询。

最后,将以下if语句添加到Update()

if (GetTeleportDown())
{
    print("Teleport " + handType);
}

if (GetGrab())
{
    print("Grab " + handType);
}

这些语句检查您创建的方法,并在返回true时将消息打印到控制台。

你准备测试sript了。 保存并返回Unity编辑器。

选择两个Controller GameObjects并通过单击Add Component,键入“Act”并选择top选项,为两者添加Actions Test组件。

打开Teleport Action下拉列表并将其值更改为\actions\default\in\Teleport。 现在,对Grab Action执行相同操作并将其更改为\ actions \ default \ in \ Grab

最后,仅选择Controller (left)并将其Hand Type更改为Left Hand。 对Controller (right)执行相同操作,但这次选择Right Hand

再次运行游戏,拿起两个控制器,按下一些按钮并squeeze the triggers。 现在查看屏幕底部的控制台行:

请注意,每个操作都在控制台中注册。

这是基本输入配置。 现在,您有能力在指尖操纵虚拟世界!

后记

本篇主要讲述了适用于Unity的HTC Vive教程,感兴趣的给个赞或者关注~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容