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.

XRServer

繼承: Object

用於 AR 和 VR 功能的服務。

說明

AR/VR 伺服器是我們“進階虛擬實境”解決方案的核心,負責執行所有處理。

教學

屬性

bool

camera_locked_to_origin

false

XRInterface

primary_interface

Transform3D

world_origin

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

float

world_scale

1.0

方法

void

add_interface(interface: XRInterface)

void

add_tracker(tracker: XRTracker)

void

center_on_hmd(rotation_mode: RotationMode, keep_height: bool)

void

clear_reference_frame()

XRInterface

find_interface(name: String) const

Transform3D

get_hmd_transform()

XRInterface

get_interface(idx: int) const

int

get_interface_count() const

Array[Dictionary]

get_interfaces() const

Transform3D

get_reference_frame() const

XRTracker

get_tracker(tracker_name: StringName) const

Dictionary

get_trackers(tracker_types: int)

void

remove_interface(interface: XRInterface)

void

remove_tracker(tracker: XRTracker)


訊號

interface_added(interface_name: StringName) 🔗

新增新介面時觸發。


interface_removed(interface_name: StringName) 🔗

當介面被移除時觸發。


reference_frame_changed() 🔗

當參考影格變換更改時發出。


tracker_added(tracker_name: StringName, type: int) 🔗

當一個新的追蹤器被新增時發出。如果你不使用一個固定數量的控制器,或者如果你將 XRAnchor3D 用於一個 AR 解決方案,請務必對此訊號做出反應,以新增與該新追蹤器相適的 XRController3D 或 XRAnchor3D 節點 。


tracker_removed(tracker_name: StringName, type: int) 🔗

當一個追蹤器被移除時發出。如此,你應該移除任何 XRController3D 或 XRAnchor3D 點。這不是強制性的,這些節點只是變得不活動,並且當一個新的追蹤器可用時,將再次啟動(即打開一個新的控制器,來代替前一個控制器)。


tracker_updated(tracker_name: StringName, type: int) 🔗

當現有追蹤器被更新時發出。如果使用者切換控制器,則可能會發生這種情況。


world_origin_changed() 🔗

當世界原點變換發生改變時觸發。


列舉

enum TrackerType: 🔗

TrackerType TRACKER_HEAD = 1

追蹤器追蹤玩家頭部的位置。這通常是玩家眼睛之間的中心位置。請注意,對於手持式 AR 裝置,這可能是該裝置的目前位置。

TrackerType TRACKER_CONTROLLER = 2

追蹤器追蹤控制器的位置。

TrackerType TRACKER_BASESTATION = 4

追蹤器追蹤基站的位置。

TrackerType TRACKER_ANCHOR = 8

追蹤器追蹤 AR 錨的位置和大小。

TrackerType TRACKER_HAND = 16

追蹤器追蹤手部的位置和關節。

TrackerType TRACKER_BODY = 32

追蹤器追蹤身體的位置和關節。

TrackerType TRACKER_FACE = 64

追蹤器追蹤面部的表情。

TrackerType TRACKER_ANY_KNOWN = 127

內部用於篩選任何已知型別的追蹤器。

TrackerType TRACKER_UNKNOWN = 128

如果我們尚未設定追蹤器型別,則在內部使用。

TrackerType TRACKER_ANY = 255

在內部用於選擇所有追蹤器。


enum RotationMode: 🔗

RotationMode RESET_FULL_ROTATION = 0

完全重設 HMD 的方向。無論使用者在現實世界中看向哪個方向。將在虛擬世界中鎖定視角。

RotationMode RESET_BUT_KEEP_TILT = 1

重設方向,但保持裝置的傾斜度。因此,如果我們正在往下看,會繼續往下看,但航向會被重設。

RotationMode DONT_RESET_ROTATION = 2

不重設 HMD 的方向,只讓玩家的位置居中。


屬性說明

bool camera_locked_to_origin = false 🔗

  • void set_camera_locked_to_origin(value: bool)

  • bool is_camera_locked_to_origin()

如果設為 true,則渲染場景時會當作相機鎖定在了 XROrigin3D。

注意:這並不能為使用者提供非常舒適的體驗。該設定存在的目的是為了進行基準測試或自動化測試,即希望通過程式碼控制渲染的內容。


XRInterface primary_interface 🔗

目前綁定到 XRServer 的主 XRInterface。


Transform3D world_origin = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

我們的追蹤空間在虛擬世界中的原點。渲染器會用到這個資訊,根據新的追蹤資料來正確放置相機。

注意:這個屬性由目前的 XROrigin3D 節點管理。暴露的目的是方便在 GDExtension 使用。


float world_scale = 1.0 🔗

  • void set_world_scale(value: float)

  • float get_world_scale()

遊戲世界相對於現實世界的縮放。預設情況下,大多數 AR/VR 平台假定 1 個遊戲世界單位等於現實世界的 1 米。


方法說明

void add_interface(interface: XRInterface) 🔗

註冊一個 XRInterface 物件。


void add_tracker(tracker: XRTracker) 🔗

注冊一個追蹤物理物件的新 XRTracker。


void center_on_hmd(rotation_mode: RotationMode, keep_height: bool) 🔗

正確地理解這個函式非常重要。AR 和 VR 平台處理定位的方式略有不同。

對於不提供空間追蹤的平台,我們的原點 (0, 0, 0) 是 HMD 的位置,但你幾乎無法控制玩家在現實世界中面對的方向。

對於提供空間追蹤的平台,我們的原點在很大程度上取決於系統。對於 OpenVR,原點通常是地面上追蹤空間的中心。對於其他平台,它通常是追蹤相機的位置。

此方法允許你將追蹤器置於 HMD 的位置。它將取得 HMD 的目前位置並使用它來調整你的所有追蹤資料;從本質上講,將現實世界重新調整到玩家在遊戲世界中的目前位置。

為了使這種方法產生可用的結果,追蹤資訊必須可用。這通常在開始遊戲後需要幾影格。

你應該在幾秒鐘後呼叫此方法。例如,當使用者請求重新調整顯示時,按住控制器上的指定按鈕一小段時間,或者當實作傳送機制時。


void clear_reference_frame() 🔗

清除之前呼叫 center_on_hmd() 設定的參考影格。


XRInterface find_interface(name: String) const 🔗

通過名稱 name 搜尋介面。例如,如果你的專案使用 AR/VR 平臺的功能,你可以通過名稱找到該平臺的介面並初始化。


Transform3D get_hmd_transform() 🔗

返回主介面的變換。


XRInterface get_interface(idx: int) const 🔗

返回在介面列表中給定 idx 索引處註冊的介面。


int get_interface_count() const 🔗

返回目前在AR/VR服務上註冊的介面數量。如果你的專案支援多個AR/VR平臺,你可以查看可用的介面,並向使用者展示一個選擇,或者簡單地嘗試初始化每個介面,並使用第一個返回 true的介面。


Array[Dictionary] get_interfaces() const 🔗

返回可用介面的列表,每個介面的ID和名稱。


Transform3D get_reference_frame() const 🔗

返回引用影格的變換。主要在內部使用,並公開以用於 GDExtension 建構介面。


XRTracker get_tracker(tracker_name: StringName) const 🔗

返回具有給定 tracker_name 的位置追蹤器。


Dictionary get_trackers(tracker_types: int) 🔗

返回 tracker_types 的追蹤器字典。


void remove_interface(interface: XRInterface) 🔗

移除該 interface。


void remove_tracker(tracker: XRTracker) 🔗

移除該 tracker。