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 Tools 工具庫。這個工具庫同時包含基礎移動功能與進階功能。

新增玩家本體

第一步是為 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 子節點,再將其網格(mesh)設為新的 PlaneMesh。目前設定網格尺寸為 100 x 100 公尺。然後再為 Floor 新增一個 CollisionShape3D 子節點,並指定形狀為 BoxShape。將盒形尺寸設定為 100 x 1 x 100 公尺,並把碰撞形狀下移 0.5 公尺,讓盒子的頂部與地板齊平。

為了更容易看出我們真的在世界中移動,純白色地板不太夠。可以使用 Wahooney 的免費貼圖產生器 建立一張貼圖。建立完成後將它加入你的專案。接著為 MeshInstance3D 節點建立一個新材質,將你的貼圖設為 albedo,並在材質屬性的 UV1 底下啟用 Triplaner

../../_images/godot_xr_tools_floor.webp

直接移動

接下來我們要在專案中加入基本的「直接移動」功能,讓使用者可透過搖桿在虛擬世界中移動。

備註

值得注意的是,當玩家在現實中靜止時於虛擬世界移動,容易引發暈眩感,尤其是對於剛接觸 VR 的新手玩家。預設的移動參數相當保守。我們建議預設採用這些安全設定,但同時在遊戲中提供選項,讓有經驗的玩家可以啟用較刺激的移動方式。

我們希望在右手控制器上啟用這個功能。請在右手 XRController3D 節點下新增一個子場景,選擇 addons/godot-xr-tools/functions/movement_direct.tscn 作為要加入的場景。

這個功能讓玩家可透過右手控制器的搖桿進行前進與後退移動。此外,還可選擇啟用左右側移,但預設為關閉。

另外,我們也要加入讓玩家可用同一個搖桿進行轉向的功能。請為控制器節點再新增一個子場景,選擇 addons/godot-xr-tools/functions/movement_turn.tscn

預設的轉向系統採用「快速轉向」方式,也就是以分段方式轉動。雖然這種方式感覺較突兀,但已被證實能有效減少暈動症。你可以透過調整轉向節點的 mode 屬性,輕鬆切換為平滑轉向模式。

此時如果執行遊戲,你會發現可以用右手搖桿在世界中自由移動。

傳送

有些玩家會覺得「傳送」比直接移動更舒適。Godot XR Tools 內建傳送功能,我們將把這個功能加到左手控制器上。

請在左手 XRController3D 節點下新增一個子場景,選擇 addons/godot-xr-tools/functions/function_teleport.tscn 場景。

加入這個場景後,玩家可以按住左手控制器的扳機,指向想去的位置,然後放開扳機,在世界中進行傳送。玩家也可以使用左手控制器的搖桿調整朝向。

如果你都正確操作,現在場景應該會長得像這樣:

../../_images/godot_xr_tools_basic_movement.webp

更多進階移動功能

Godot XR Tools 還提供滑翔、抓鉤、噴射背包、攀爬等多種進階移動機制。

大部分的進階功能和前述基礎移動功能用法相似,只需將對應的子場景新增到控制器即可。

本教學稍後會針對需要特殊設定(如攀爬)的功能做進一步說明,其他功能請參考 Godot XR Tools 自帶的說明文件。