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) 🔗
当现有追踪器被更新时发出。如果用户切换控制器,则可能会发生这种情况。
枚举¶
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 的方向,只让玩家的位置居中。
属性说明¶
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
。