美文网首页
Unity强化篇(二) —— 适用于Unity的HTC Vive

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

作者: 刀客传奇 | 来源:发表于2019-02-13 10:14 被阅读88次

    版本记录

    版本号 时间
    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教程,感兴趣的给个赞或者关注~~~

    相关文章

      网友评论

          本文标题:Unity强化篇(二) —— 适用于Unity的HTC Vive

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