版本记录
版本号 | 时间 |
---|---|
V1.0 | 2019.02.13 星期三 |
前言
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
的内容:
每个文件夹都作为特定资源的基本文件夹:
- Materials:用于场景的材料,包括蓝色弹力球。
- Models:所有模型。
- Physics Materials:弹性球物理材料。
- Prefabs:松散的物体预制件。
- Scenes:游戏场景就在这里。
- Scripts:所有脚本。
- Textures:场景中所有对象共享的单个纹理。
打开Game
场景。 查看场景视图,然后单击play
以尝试游戏:
目前,没有太多事情发生,因为现场还没有VR装备。 您需要将SteamVR
添加到项目中以将Vive
连接到Unity
。
Setting Up SteamVR
SteamVR SDK
是Valve
制作的官方库,可以更轻松地为所有主要的VR headsets开发。 它目前在资源商店免费,并支持Oculus Rift
和HTC 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
以将其保存到操作集。
现在对Trigger
和Trackpad
执行相同的操作:为每个触发器创建一个新的Button
输入,将Trigger
的Click
事件链接到Trackport
并将Trackpad
的Click
事件链接到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教程,感兴趣的给个赞或者关注~~~