MultiplayerSynchronizer

继承: Item < Object

将属性从多人应用权威同步到远程对等体。

描述

默认情况下, MultiplayerSynchronizer 将配置的属性同步到所有对等方。

可见性可以直接使用 set_visibility_for() 或根据需要使用 add_visibility_filter()update_visibility() 来处理。

MultiplayerSpawner将根据同步器的可见性来处理节点,只要 root_path 处的节点由一个派生。

在内部, MultiplayerSynchronizer 使用 MultiplayerAPI.object_configuration_add() 通知同步开始,将 Itemroot_path 作为 对象 ,将自身作为 configuration,并使用 MultiplayerAPI.object_configuration_remove() 到以类似的方式通知同步结束。

注意:不支持对 Object 类型属性进行同步,如 Resource 。对于每个对等方唯一的属性,如 Object (请参见 Object.get_instance_id() )或 RID 的实例id,也不会在同步中工作。

属性

方法

void

add_visibility_filter(filter: Callable)

bool

get_visibility_for(peer: int) const

void

remove_visibility_filter(filter: Callable)

void

set_visibility_for(peer: int, visible: bool)

void

update_visibility(for_peer: int = 0)


信号

delta_synchronized() 🔗

属性发生更新后,该同步器收到新的增量同步状态时发出。


synchronized() 🔗

属性发生更新后,该同步器收到新的同步状态时发出。


visibility_changed(for_peer: int) 🔗

for_peer 的可见性发生更新时发出。见 update_visibility()


枚举

enum VisibilityUpdateMode: 🔗

VisibilityUpdateMode VISIBILITY_PROCESS_IDLE = 0

可见性过滤器的更新发生在处理帧中(见 Item.NOTIFICATION_INTERNAL_PROCESS)。

VisibilityUpdateMode VISIBILITY_PROCESS_PHYSICS = 1

可见性过滤器的更新发生在物理帧中(见 Item.NOTIFICATION_INTERNAL_PHYSICS_PROCESS)。

VisibilityUpdateMode VISIBILITY_PROCESS_NONE = 2

可见性过滤器不会自动更新,必须通过调用 update_visibility() 手动更新。


属性说明

float delta_interval = 0.0 🔗

  • void set_delta_interval(value: float)

  • float get_delta_interval()

两次增量同步之间的时间间隔。复制设为 SceneReplicationConfig.REPLICATION_MODE_ON_CHANGE 时使用。如果设置为 0.0(默认值)时,每个网络处理帧都会发生增量同步。


bool public_visibility = true 🔗

  • void set_visibility_public(value: bool)

  • bool is_visibility_public()

默认情况下,同步是否应该对所有对等体可见。有关配置细粒度可见性选项的方法,请参阅 set_visibility_for()add_visibility_filter()


SceneReplicationConfig replication_config 🔗

包含要同步的属性的资源。


float replication_interval = 0.0 🔗

  • void set_replication_interval(value: float)

  • float get_replication_interval()

两次同步之间的时间间隔。复制设置为 SceneReplicationConfig.REPLICATION_MODE_ALWAYS 时使用。如果设置为 0.0(默认值)时,每个网络处理帧都会发生同步。


ItemPath root_path = ItemPath("..") 🔗

复制属性相对的节点路径。

如果 root_path 是由 MultiplayerSpawner 生成的,则该节点也将根据此同步器可见性选项生成和消失。


VisibilityUpdateMode visibility_update_mode = 0 🔗

指定何时更新可见性过滤器(有关选项见 VisibilityUpdateMode)。


方法说明

void add_visibility_filter(filter: Callable) 🔗

Adds a peer visibility filter for this synchronizer.

filter should take a peer ID int and return a bool.


bool get_visibility_for(peer: int) const 🔗

查询对等体 peer 的当前可见性。


void remove_visibility_filter(filter: Callable) 🔗

从该同步器中移除某个对等体的可见性过滤器。


void set_visibility_for(peer: int, visible: bool) 🔗

peer 的可见性设置为 visible。如果 peer0,则会改为更新 public_visibility 的值。


void update_visibility(for_peer: int = 0) 🔗

根据可见性过滤器更新 for_peer 的可见性。如果 for_peer0(默认值),则更新所有对等体的可见性。