Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

XRServer

继承: Object

用于 AR 和 VR 功能的服务。

描述

AR/VR 服务器是我们“高级虚拟现实”解决方案的核心,负责执行所有处理。

教程

属性

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 ( XRInterface interface )

void

add_tracker ( XRPositionalTracker tracker )

void

center_on_hmd ( RotationMode rotation_mode, bool keep_height )

XRInterface

find_interface ( String name ) const

Transform3D

get_hmd_transform ( )

XRInterface

get_interface ( int idx ) const

int

get_interface_count ( ) const

Dictionary[]

get_interfaces ( ) const

Transform3D

get_reference_frame ( ) const

XRPositionalTracker

get_tracker ( StringName tracker_name ) const

Dictionary

get_trackers ( int tracker_types )

void

remove_interface ( XRInterface interface )

void

remove_tracker ( XRPositionalTracker tracker )


信号

interface_added ( StringName interface_name )

添加新接口时触发。


interface_removed ( StringName interface_name )

当接口被移除时触发。


tracker_added ( StringName tracker_name, int type )

当一个新的追踪器被添加时发出。如果你不使用一个固定数量的控制器,或者如果你将 XRAnchor3D 用于一个 AR 解决方案,请务必对此信号做出反应,以添加与该新追踪器相适的 XRController3DXRAnchor3D 节点 。


tracker_removed ( StringName tracker_name, int type )

当一个追踪器被移除时发出。如此,你应该移除任何 XRController3DXRAnchor3D 点。这不是强制性的,这些节点只是变得不活动,并且当一个新的追踪器可用时,将再次激活(即打开一个新的控制器,来代替前一个控制器)。


tracker_updated ( StringName tracker_name, int type )

当现有追踪器被更新时发出。如果用户切换控制器,则可能会发生这种情况。


枚举

enum TrackerType:

TrackerType TRACKER_HEAD = 1

追踪器追踪玩家头部的位置。这通常是玩家眼睛之间的中心位置。请注意,对于手持式 AR 设备,这可能是该设备的当前位置。

TrackerType TRACKER_CONTROLLER = 2

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

TrackerType TRACKER_BASESTATION = 4

追踪器追踪基站的位置。

TrackerType TRACKER_ANCHOR = 8

追踪器追踪 AR 锚的位置和大小。

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 的方向,只让玩家的位置居中。


属性说明

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 ( float value )

  • float get_world_scale ( )

允许你根据你的游戏的单位来调整缩放。大多数 AR/VR 平台假定 1 个游戏世界单位 = 1 个现实世界的米。


方法说明

void add_interface ( XRInterface interface )

注册一个 XRInterface 对象。


void add_tracker ( XRPositionalTracker tracker )

注册一个新的 XRPositionalTracker,用于跟踪现实空间中的一个空间位置。


void center_on_hmd ( RotationMode rotation_mode, bool keep_height )

正确地理解这个函数非常重要。AR 和 VR 平台处理定位的方式略有不同。

对于不提供空间跟踪的平台,我们的原点 (0,0,0) 是 HMD 的位置,但你几乎无法控制玩家在现实世界中面对的方向。

对于提供空间跟踪的平台,我们的原点在很大程度上取决于系统。对于 OpenVR,原点通常是地面上跟踪空间的中心。对于其他平台,它通常是跟踪相机的位置。

此方法允许你将跟踪器置于 HMD 的位置。它将获取 HMD 的当前位置并使用它来调整你的所有跟踪数据;从本质上讲,将现实世界重新调整到玩家在游戏世界中的当前位置。

为了使这种方法产生可用的结果,跟踪信息必须可用。这通常在开始游戏后需要几帧。

你应该在几秒钟后调用此方法。例如,当用户请求重新调整显示时,按住控制器上的指定按钮一小段时间,或者当实现传送机制时。


XRInterface find_interface ( String name ) const

通过名称 name 查找接口。例如,如果你的项目使用 AR/VR 平台的功能,你可以通过名称找到该平台的接口并初始化。


Transform3D get_hmd_transform ( )

返回主界面的变换。


XRInterface get_interface ( int idx ) const

返回在接口列表中给定 idx 索引处注册的接口。


int get_interface_count ( ) const

返回当前在AR/VR服务上注册的界面数量。如果你的项目支持多个AR/VR平台,你可以查看可用的界面,并向用户展示一个选择,或者简单地尝试初始化每个界面,并使用第一个返回 true的界面。


Dictionary[] get_interfaces ( ) const

返回可用界面的列表,每个界面的ID和名称。


Transform3D get_reference_frame ( ) const

返回引用帧的变换。主要在内部使用,并公开以用于 GDExtension 构建接口。


XRPositionalTracker get_tracker ( StringName tracker_name ) const

返回具有给定 tracker_name 的位置追踪器。


Dictionary get_trackers ( int tracker_types )

返回 tracker_types 的追踪器字典。


void remove_interface ( XRInterface interface )

移除该 interface


void remove_tracker ( XRPositionalTracker tracker )

移除该位置 tracker