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.
Checking the stable version of the documentation...
XRServer
繼承: Object
用於 AR 和 VR 功能的服務。
說明
AR/VR 伺服器是我們“進階虛擬實境”解決方案的核心,負責執行所有處理。
教學
屬性
|
||
|
||
|
方法
void |
add_interface(interface: XRInterface) |
void |
add_tracker(tracker: XRTracker) |
void |
center_on_hmd(rotation_mode: RotationMode, keep_height: bool) |
void |
|
find_interface(name: String) const |
|
get_interface(idx: int) const |
|
get_interface_count() const |
|
get_interfaces() const |
|
get_reference_frame() const |
|
get_tracker(tracker_name: StringName) const |
|
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 🔗
如果設為 true,則渲染場景時會當作相機鎖定在了 XROrigin3D。
注意:這並不能為使用者提供非常舒適的體驗。該設定存在的目的是為了進行基準測試或自動化測試,即希望通過程式碼控制渲染的內容。
XRInterface primary_interface 🔗
void set_primary_interface(value: XRInterface)
XRInterface get_primary_interface()
目前綁定到 XRServer 的主 XRInterface。
Transform3D world_origin = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_world_origin(value: Transform3D)
Transform3D get_world_origin()
我們的追蹤空間在虛擬世界中的原點。渲染器會用到這個資訊,根據新的追蹤資料來正確放置相機。
注意:這個屬性由目前的 XROrigin3D 節點管理。暴露的目的是方便在 GDExtension 使用。
遊戲世界相對於現實世界的縮放。預設情況下,大多數 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。