基礎 XR 移動
在基礎移動方面,我們會持續使用 Godot XR Tools 工具庫。這個工具庫同時包含基礎移動功能與進階功能。
新增玩家本體
第一步是為 XROrigin3D 節點新增一個輔助節點。由於 XR 支援 Roomscale 空間定位,你不能直接將 XR 設定掛載在 CharacterBody3D 節點並期待一切正常運作。當使用者在現實空間中移動,不再站在房間中心時,這將導致問題。Godot XR Tools 已將所需邏輯封裝於一個名為 PlayerBody 的輔助節點。
選取 XROrigin3D 節點,點擊「實例化子場景」按鈕來加入子場景。選擇 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 公尺,讓盒子的頂部與地板齊平。
To make it easier to see that we're actually moving around our world, a white floor isn't going to do it. Create a texture using Wahooneys excellent free texture generator. Once you've created the texture add it to your project. Then create a new material for the MeshInstance3D node, add your texture as the albedo, and enable Triplaner under UV1 in the material properties.
直接移動
接下來我們要在專案中加入基本的「直接移動」功能,讓使用者可透過搖桿在虛擬世界中移動。
備註
值得注意的是,當玩家在現實中靜止時於虛擬世界移動,容易引發暈眩感,尤其是對於剛接觸 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 場景。
加入這個場景後,玩家只需按下左手控制器的扳機、指向目的地,再放開扳機,就能在世界中進行傳送。另外,玩家還可以用搖桿調整傳送後的朝向。
如果你都正確操作,現在場景應該會長得像這樣:
更多進階移動功能
Godot XR Tools 還提供滑翔、抓鉤、噴射背包、攀爬等多種進階移動機制。
大部分的進階功能和前述基礎移動功能用法相似,只需將對應的子場景新增到控制器即可。
本教學稍後會針對需要特殊設定(如攀爬)的功能做進一步說明,其他功能請參考 Godot XR Tools 自帶的說明文件。