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

首先看下写作环境

C#4, Unity 2018.2, Unity

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

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

在本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
  • 已安装 Steam SteamVR 。 请参阅本指南 this guide ,该指南将指导您完成硬件设置并提供下载Steam和SteamVR的链接。
  • 基本的Unity知识。
  • 对脚本的基本了解。
  • 打开并连接的 HTC Vive
  • 在Unity中打开准备好的 starter 文件夹。 在 Project 窗口中查看 RW 的内容:

    Setting Up SteamVR

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

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

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

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

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

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

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

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

    Handling Input

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

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

    1. Defining Actions

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

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

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

  • 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 操作集:

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

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

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

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

    结果如下:

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

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

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

    3. Using Actions

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

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

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

    现在对 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组件。