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

2019-02-13  本文已影响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游戏中。具体来说,您将学习如何:

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

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

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

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

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

打开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输入窗口;这包含所有操作集和操作:

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

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

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

是时候编辑动作了!

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

出现确认窗口时,选择Delete

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

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

接下来,选择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

使用此代码,您做了:

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

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

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

以下是这些内容:

最后,将以下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教程,感兴趣的给个赞或者关注~~~

上一篇下一篇

猜你喜欢

热点阅读