65.9K
CodeProject 正在变化。 阅读更多。
Home

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

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2018 年 5 月 27 日

CPOL

13分钟阅读

viewsIcon

1485

大家好,我还活着!我终于克服了拖延症,完成了我关于使用 Google Daydream 的下一系列文章!

大家好,我还活着!我终于克服了拖延症,完成了我关于使用 Google Daydream 的下一系列文章!

现在您可能会看着标题想:“你花了两个月才写完这个?” 当然不是!我写得更多!我(再次)决定,我不会像写 Cardboard 移动性那样写一篇巨篇幅的文章。

相反,我将把它们分成 13 篇独立的文章,从今天开始发布。再次抱歉让大家久等了,但嘿,往好的方面想!事情终于又开始发生了!至少在接下来的两周里是这样!

现在,我们开始第 59 天!

我们知道如何在 Unity 中创建游戏,我们知道如何设置 Google 的 Cardboard 和 Daydream 的 SDK,我们学会了如何移动,而今天,我们将学习所有关于 Google Daydream VR 控制器的知识!

有了新的 Daydream 控制器,我们获得了另一个自由度来与游戏世界互动,但更重要的是,我们现在有了更多的输入可以使用。我以前曾稍微谈过它们,但除了点击一个按钮之外,我们并没有真正深入研究。

以下是我们可用的新控件。您可以在Google 的文档中找到更多信息。

  • 触摸板(滑动和点击) – 控制器的一部分,我们可以检测点击和滑动
  • App 按钮 – 我们可以用于游戏的第二个输入
  • Home 按钮 – 此按钮有两个用途。第一个是调出 Daydream 主菜单,第二个是重新居中控制器

以下是一张来自VRFocus.com的参考图,供我们参考

今天,我的目标是

  1. 查看Daydream Element 的手臂模型,看看我们如何在给定的 SDK 中调整手臂模型以适应不同的用途

现在您可能会想? Josh,这听起来很酷,但如果我没有兼容 Daydream 的设备或头显怎么办?

没关系,您仍然可以跟着做!Google 提供了一个模拟器,允许我们在游戏中模拟使用控制器!学习更多知识总是有益的!随着时间的推移,越来越多的人自然会升级到兼容设备!

让我们开始吧!

步骤 1:设置手臂模型

以前在我们的《生存射击》游戏中,我们只是简单地将遥控器替换成了我们的枪支资产。那当时工作得很好。

但是,如果我们试图使用像剑这样的东西呢?现在我们会遇到一些复杂情况。

幸运的是,Daydream Element 提供了我们可以参考的示例,用于创建三种不同场景的手臂模型

  1. 持枪
  2. 持近战武器
  3. 投掷物品

Daydream 模型在 SDK 提供的默认手臂模型上做了一些自己的扩展,但让我们看看我们能从中学习到什么!

下载 Daydream Element SDK

我们首先应该做的是查看 Daydream Element 背后的代码。您可以在此处下载

下载最新的 DaydreamElements.unitypackage ,其中包含游戏中所需的所有文件,我们可以将其导入到现有的 Unity 项目中。

让我们来创建它!

  1. 在 Unity 中,创建一个新项目。我称之为**Daydream Elements**。
  2. 在顶部菜单栏中,选择Assets > Import Packages > Custom Packages ,然后选择我们刚刚下载的文件。
  3. 导入所有内容

截至**2018 年 1 月 10 日**,Daydream Element 的当前结构如下

我们目前感兴趣的是 Arms Model 场景。

  1. 打开Assets/DaydreamElements/Elements/ArmModels/Demo中的**ArmsModelDemo**场景

现在我们可以运行场景了。

我将使用模拟器在游戏中进行操作。

提醒一下,要模拟使用控制器,我们需要在场景中有两样东西

  1. GvrControllerMain
  2. GvrEditorEmulator

有了这些预制体,我们可以通过以下方式模拟头部运动:

  • Alt + 鼠标移动 – 旋转摄像头

如果我们想使用控制器,说明已附加到 GvrControllerMain 预制体上,但为了快速回顾

  1. Shift + 鼠标移动 = 移动游戏内的手臂
  2. Shift + 左键单击 = 点击触摸板按钮
  3. Shift + 右键单击 = 点击 App 按钮
  4. Shift + 中键单击 = 点击 Home 按钮
  5. Shift + Ctrl + 鼠标移动 = 在触摸板上滑动

现在我们有了这一切,让我们来看看场景中的模型。

探索如何调整我们的手臂模型

在**ArmsModelDemo**场景中,我们可以选择查看 3 种不同的模型类型以及自定义手臂的功能。

现在,让我们看一下自定义手臂模型,以便理解**GVR Arm Models**中的每个设置的作用。

  1. 开始我们的场景,您必须选择一个手臂模型来玩,请按住**Shift**并选择**戴帽子的模型**并左键单击它(假设您正在使用 Unity 模拟器,就像我一样)。
  2. 这是 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

具体来说,我们正在更改附加到 GvrControllerPointerGvrArmModel 脚本。

查看场景,有 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

© . All rights reserved.