Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

基础 XR 运动

对于基本运动,我们将继续使用 Godot XR 工具库。该库既包含基本运动功能,也包含更高级的功能。

添加玩家的身体

我们首先要做的第一步,是给咱们的 XROrigin3D 节点添加一个辅助节点。因为 XR 支持房间级(roomscale)追踪,你不能简单粗暴地直接把 XR 相关设置丢进一个 CharacterBody3D 节点里,然后指望它能正常工作。一旦玩家在现实物理空间里走动,不再站在房间的中心位置时,你就会遇到各种麻烦。Godot XR Tools 把解决这些问题的必要逻辑都封装进了一个叫做 PlayerBody 的辅助节点里。

选中你的 XROrigin3D 节点,然后点击工具栏上的 Instantiate Child Scene 按钮,准备添加一个子场景。在弹出的窗口中找到并选择 addons/godot-xr-tools/player/player_body.tscn 这个文件,把它添加进来。

添加地板

该节点控制角色在游戏中的移动,并会立即对重力做出反应。因此,为了防止玩家无限下坠,我们将在场景中快速添加一个地板。

我们首先在根节点下添加一个 StaticBody3D 节点,并将它重命名为 Floor 。接着,给这个 Floor 节点添加一个 MeshInstance3D 作为子节点,然后为它新建一个 PlaneMesh 。目前,我们先把这个网格的大小设置为 100 x 100 米。接下来,再给 Floor 节点添加一个 CollisionShape3D 作为子节点,并给它新建一个 BoxShape 。我们将这个盒体形状的大小设置为 100 x 1 x 100 米。最后,我们还需要把这个碰撞形状向下移动 0.5 米,这样盒体的顶部就能和地板表面完美齐平了。

为了让我们能更清楚地看到自己在世界里真的在移动,光秃秃的白色地板肯定是不够的。你可以使用 Wahooneys excellent free texture generator 来制作一张纹理图。做好纹理之后,把它导入到你的项目里。然后,为你的 MeshInstance3D 节点创建一个新的材质(Material),将你的纹理图作为 Albedo(反照率/基础颜色)贴图添加进去,最后在材质属性的 UV1 选项下,把 Triplanar(三平面映射) 功能打开。

../../_images/godot_xr_tools_floor.webp

直接移动

我们将开始在我们的设置中添加一些基本的直接运动。这允许用户使用摇杆输入在虚拟世界中移动。

备注

应当注意,玩家在虚拟世界移动的同时在现实世界中处于静止状态,这可能导致晕眩,对经验较少的 VR 玩家尤其如此。我们的移动函数的默认设置相对保守。我们建议你遵守这些设置,但同时在游戏中提供为更有经验且习惯于 VR 游戏的玩家提供舒适度更低的设置的功能。

我们想在右手控制器上启用这个功能。具体做法是,在右手的 XRController3D 节点下添加一个子场景。请选择 addons/godot-xr-tools/functions/movement_direct.tscn 这个场景文件来添加。

这个功能可以让玩家通过右手手柄的摇杆来向前或向后移动。它还有一个选项可以开启向左/向右的平移(侧向移动),不过默认情况下这个选项是关闭的。

接下来,我们要给玩家加上用这个摇杆(左手柄摇杆)来转身的功能。我们需要在控制器节点上再添加一个子场景,这次请选择 addons/godot-xr-tools/functions/movement_turn.tscn 这个文件。

默认情况下,转向系统采用的是‘分段转向(snap turn)’的方式。这意味着玩家的转向是‘一格一格’分步进行的。虽然这种方式可能会让人觉得有些突兀,但它其实是一种久经考验、用来对抗晕动症的有效方法。如果你想要换成更顺滑的转向模式,只需要在转向节点(turn node)上修改 mode 属性就可以轻松实现啦。

如果你在这个时间点运行你的游戏,你会发现你可以使用右手摇杆在世界中自由移动。

传送

对于一些用户来说,相比于直接移动,瞬移到游戏世界中的另一个位置会让他们感觉更舒适(不易产生晕动症)。Godot XR Tools 通过传送功能(teleport function)支持这种移动方式,而我们接下来就要把它添加到我们的左手控制器上。

通过加载(选择) addons/godot-xr-tools/functions/function_teleport.tscn 这个场景,将它作为新的子场景添加到你的左手 XRController3D 节点下。

添加了这个场景后,玩家就能通过按住左手手柄的扳机键(trigger)、瞄准想要去的位置,然后松开扳机键,在世界中瞬移了。此外,玩家还可以使用左手手柄的摇杆来调整面朝的方向(朝向)。

如果你正确执行了以上所有步骤,你的场景现在看起来应该是这样的:

../../_images/godot_xr_tools_basic_movement.webp

更多高级移动功能

Godot XR 工具增加了更多的运动功能,如滑翔,抓钩,喷气背包,攀爬机制等。

其中大部分与之前我们处理的基本移动功能类似,简单地将插件中相关的子场景添加到负责实现的控制器中即可。

稍后我们会深入探究其中一些需要额外设置的功能(例如攀爬),但剩余部分请参考 Godot XR 工具部分的帮助页面。