第 59 天:在 Daydream Element 中玩转手臂模型





0/5 (0投票)
大家好,我还活着!我终于克服了拖延症,完成了我关于使用 Google Daydream 的下一系列文章!
大家好,我还活着!我终于克服了拖延症,完成了我关于使用 Google Daydream 的下一系列文章!
现在您可能会看着标题想:“你花了两个月才写完这个?” 当然不是!我写得更多!我(再次)决定,我不会像写 Cardboard 移动性那样写一篇巨篇幅的文章。
相反,我将把它们分成 13 篇独立的文章,从今天开始发布。再次抱歉让大家久等了,但嘿,往好的方面想!事情终于又开始发生了!至少在接下来的两周里是这样!
现在,我们开始第 59 天!
我们知道如何在 Unity 中创建游戏,我们知道如何设置 Google 的 Cardboard 和 Daydream 的 SDK,我们学会了如何移动,而今天,我们将学习所有关于 Google Daydream VR 控制器的知识!
有了新的 Daydream 控制器,我们获得了另一个自由度来与游戏世界互动,但更重要的是,我们现在有了更多的输入可以使用。我以前曾稍微谈过它们,但除了点击一个按钮之外,我们并没有真正深入研究。
以下是我们可用的新控件。您可以在Google 的文档中找到更多信息。
- 触摸板(滑动和点击) – 控制器的一部分,我们可以检测点击和滑动
- App 按钮 – 我们可以用于游戏的第二个输入
- Home 按钮 – 此按钮有两个用途。第一个是调出 Daydream 主菜单,第二个是重新居中控制器
以下是一张来自VRFocus.com的参考图,供我们参考
今天,我的目标是
- 查看Daydream Element 的手臂模型,看看我们如何在给定的 SDK 中调整手臂模型以适应不同的用途
现在您可能会想? Josh,这听起来很酷,但如果我没有兼容 Daydream 的设备或头显怎么办?
没关系,您仍然可以跟着做!Google 提供了一个模拟器,允许我们在游戏中模拟使用控制器!学习更多知识总是有益的!随着时间的推移,越来越多的人自然会升级到兼容设备!
让我们开始吧!
步骤 1:设置手臂模型
以前在我们的《生存射击》游戏中,我们只是简单地将遥控器替换成了我们的枪支资产。那当时工作得很好。
但是,如果我们试图使用像剑这样的东西呢?现在我们会遇到一些复杂情况。
幸运的是,Daydream Element 提供了我们可以参考的示例,用于创建三种不同场景的手臂模型
- 持枪
- 持近战武器
- 投掷物品
Daydream 模型在 SDK 提供的默认手臂模型上做了一些自己的扩展,但让我们看看我们能从中学习到什么!
下载 Daydream Element SDK
我们首先应该做的是查看 Daydream Element 背后的代码。您可以在此处下载。
下载最新的 DaydreamElements.unitypackage
,其中包含游戏中所需的所有文件,我们可以将其导入到现有的 Unity 项目中。
让我们来创建它!
- 在 Unity 中,创建一个新项目。我称之为**Daydream Elements**。
- 在顶部菜单栏中,选择Assets > Import Packages > Custom Packages ,然后选择我们刚刚下载的文件。
- 导入所有内容
截至**2018 年 1 月 10 日**,Daydream Element 的当前结构如下
我们目前感兴趣的是 Arms Model 场景。
- 打开Assets/DaydreamElements/Elements/ArmModels/Demo中的**ArmsModelDemo**场景
现在我们可以运行场景了。
我将使用模拟器在游戏中进行操作。
提醒一下,要模拟使用控制器,我们需要在场景中有两样东西
GvrControllerMain
GvrEditorEmulator
有了这些预制体,我们可以通过以下方式模拟头部运动:
- Alt + 鼠标移动 – 旋转摄像头
如果我们想使用控制器,说明已附加到 GvrControllerMain
预制体上,但为了快速回顾
- Shift + 鼠标移动 = 移动游戏内的手臂
- Shift + 左键单击 = 点击触摸板按钮
- Shift + 右键单击 = 点击 App 按钮
- Shift + 中键单击 = 点击 Home 按钮
- Shift + Ctrl + 鼠标移动 = 在触摸板上滑动
现在我们有了这一切,让我们来看看场景中的模型。
探索如何调整我们的手臂模型
在**ArmsModelDemo**场景中,我们可以选择查看 3 种不同的模型类型以及自定义手臂的功能。
现在,让我们看一下自定义手臂模型,以便理解**GVR Arm Models**中的每个设置的作用。
- 开始我们的场景,您必须选择一个手臂模型来玩,请按住**Shift**并选择**戴帽子的模型**并左键单击它(假设您正在使用 Unity 模拟器,就像我一样)。
- 这是 Google 提供的自定义手臂配置,允许我们调整设置,通过**GvrArmModel 脚本**,该脚本附加到 Google SDK 提供的
GvrControllerPointer
上,使我们能够微调控制器。此特定模式允许我们在游戏中配置设置,并提供一个镜像让我们看到我们的更改如何影响我们的手臂。
现在,让我们谈谈我们在 **Daydream Element** 和 **Google VR SDK** 中看到的内容之间的一些差异。在 Google VR SDK 中
- 我们**会**获得 GvrControllerPointer 预制体,特别是 Gvr Arm Model 脚本,它允许我们使用模拟器或 Daydream 控制器的输入来移动我们的控制器。
- 我们**不会**获得您在上面的图片中看到的 the arm visualizer。具体来说,我们无法获得一个能自然地跟随控制器移动的手臂。因此,我们将很大程度上忽略手臂。
- 我们**不会**获得我们在其他手臂模型中将使用的手臂模型脚本扩展。在我看来,这损失不大,因为我们已有的功能已经涵盖了大多数常见用法。
既然这个问题已经解决了,让我们开始玩自定义手臂模型场景,以充分理解 Daydream 中我们手臂的控制。
我们在该场景中更改的具体手臂位于:Player > ModesArmModel > CustomizeArm > GvrControllerPointer。
具体来说,我们正在更改附加到 GvrControllerPointer
的 GvrArmModel
脚本。
查看场景,有 6 个变量可以更改,使我们能够更改
- 肘部休息位置
- 腕部休息位置
- 控制器休息位置
- 手臂伸展偏移量
- 肘部弯曲比例
- 指针倾斜角度
请尝试滑动每个选项,看看它们的作用。所做的更改。
我认为 Google 提供的默认值应该能解决大多数情况,如果不是全部的话。这些值的目标是设置为尽可能接近玩家自己会使用的位置。在这种情况下,默认值适用于一个右撇子,他拿着一个弯曲 90 度的肘部控制器。
以下是 Dummy 模型和我们拥有的默认 Gvr Arm Model 脚本当前使用的值
总结一下结果,它们的作用如下:
肘部休息位置 – 移动我们手臂模型的手肘,在这种情况下,X 值将手臂(或遥控器)移到右侧以使其适合右手,Y 值降低肘部/控制器,Z 值将我们的肘部/控制器向前移动。
注意:白色模型是真实的,而灰色是我们进行特定调整的模型
腕部休息位置 – 移动我们手臂模型的腕关节,在腕部调整之后。默认选项将其保持为 0。唯一更改的值是 Z 值,它会将我们的控制器进一步向外伸展。
控制器休息位置 – 这是进一步调整控制器位置的地方。默认值为 0、0、0.05,将控制器稍微向前移动到腕部。
手臂伸展偏移量 – 这是“控制器向上旋转时应用的肘部位置的偏移量”,这意味着当我们将控制器向上移动使其水平时,我们将从控制器平放的起始位置开始应用此偏移量,直到它垂直。
玩玩这个设置,一个好的用例是当您想使用剑并将其保持在中间时(如在 Swing Arm Model 中),您会将偏移量设置为 0, 0, 0。
肘部弯曲比例 – 这是“应用于肘部旋转的控制器旋转的比例”。值越高,我们的肘部/控制器越会朝那个方向移动。
在图像中很难看清,但如果我们增加比例,您会注意到控制器现在会拉伸得更长一些吗?
指针倾斜角度 – 这是我们的激光指针将从控制器发出的角度
现在我们对每个手臂值的作用都有了大致了解,让我们开始看看 Google 每个手臂模型的位置
查看 Swing Arm Model
让我们回到并查看 swing arm model(带剑的模型)。为此,我们可以按**Shift + 右键单击**返回,或按下 Daydream 设备上的 App 按钮。
让我们看看 Google 如何描述他们的 Swing Arm Model
“……在此特定模型实现中,控制器 X 和 Y 旋转的 50% 应用于肩关节,30% 应用于肘关节,20% 应用于腕关节。当控制器向后旋转时,分布会发生变化,10% 应用于肩关节,40% 应用于肘关节,50% 应用于腕关节。这是为了防止手臂在面向后方时旋转,并以看似不可能的方式弯曲。”
现在在模型中,让我们看看 Swing Arm 使用的值。
与我们的默认手臂相比
忽略创建的自定义扩展代码,主要区别在于 arm extension offset 设置为 (0, 0, 0)。
这意味着什么?
当我们开始移动控制器时,我们的手臂会更靠近中心。例如
注意我们的虚拟手臂始终保持在我们移动它的原始中心点?
查看 Shooting Arm Model
接下来是带枪的 shooting arm model。返回手臂选择页面,然后选择枪支模型。
这是官方描述所做的更改
“它经过调整,略微减小了 armExtensionOffset 属性。此更改使得在瞄准时更容易,而不会被瞄准器遮挡用户的视线。此外,瞄准器相对于控制器进行定位,让用户感觉像是握着瞄准器的手柄,而不是枪管。”
这实际上意味着,对于大多数情况,我们没有对 arm offset 进行重大更改,最大的新增之处在于我们如何定位瞄准器。
这是它的值
再次比较,这是我们的默认值
如您所见,并没有重大变化,最大的变化是对枪支控件进行了一些调整,以确保在移动时枪支模型不会直接出现在玩家面前。
最有可能的是,如果我们想在这里进行一些更改,我们也需要自己调整这些值,以确保我们的武器资产不会挡住玩家的脸。
除此之外,关于这个特定的模型,确实没有什么可说的了。
查看 Throw Arm Model
我们要快速浏览的第三个也是最后一个手臂模型是投掷手臂模型,或者更具体地说,是**模型!**
如果我们查看投掷手臂模型的描述,您会看到
“投掷结合了多个手臂模型。第一个是 GvrArmModel 的一个实例,其 armExtensionOffset 属性已修改,以便当用户向上旋转控制器时,手臂模型会向上、向侧面(具体取决于用户的惯用手设置)以及向后移动一点。这会产生一种控制器似乎向后弯曲以准备投掷的动作。
使用的第二个手臂模型称为 TransitionArmModel。用于根据上下文平滑地在不同手臂模型之间过渡。在捡起球之前,使用默认手臂模型。当捡起球时,它会过渡到使用为投掷调优的手臂模型。TransitionArmModel 不会简单地随时间在两个手臂模型之间进行插值,因为这种变化会令人不适。相反,它会根据控制器的角速度插值到新的手臂模型,以便过渡仅在控制器移动时发生。”
我不会深入研究这两个手臂之间的插值,但让我们看看使用的值。在查看 **ThrowArm** 时,我们会看到附加了两个 **Gvr Arm Model** 脚本。
第一个用于我们在场景中抓球之前的动作,第二个用于抓球之后。让我们看看值
再次快速比较,这是默认值
再一次,除了 Arm Extension Offset 之外,其他所有东西实际上差别都不大。
我们的普通选择手臂就是如此,一个普通的手臂,其值与我们拥有的相同。然而,现在有趣的是查看偏移值,看看我们现在理解了多少。
我们增加了 X 值,减少了 Y 和 Z 值的 arm extension。因此,每当我们把遥控器举到垂直位置时,手臂会更靠右,稍微低一点,并且会比默认值更向后推。
这是一个图像示例
寻找手臂模型结论
现在我们已经完成了手臂模型的介绍,我们应该对如何定位我们的手臂有了更多的了解。
我们的游戏中不会有手臂模型(除非我们自己添加!),所以能够理解 **Gvr Arm Model** 中的值如何影响我们的控制器位置非常重要。
幸运的是,在查看了所有不同的手臂模型之后,看起来我们可以将默认值用于大多数情况,如有必要,只需进行一些微小的调整。
唯一可能需要的更改是 **Arm Extension Offset** 值,以更牢固地适应特定场景,但即使如此,也更多的是调整值的问题,而不是其他。
结论
希望在今天结束时,我们现在对如何玩转 **Gvr Arm Model** 以便为用户正确地定位手臂有了更好的理解。
明天,我们将研究设置 Daydream 控制器以及设置控制器时可能遇到的一些常见问题。
这篇文章 Day 59: Playing with the Arm Models in Daydream Element 最早出现在 Coding Chronicles。