MultiplayerSynchronizer

继承: Node < Object

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

描述

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

可以使用 set_visibility_for 直接处理可见性,也可以通过 add_visibility_filterupdate_visibility 在需要时进行处理。

MultiplayerSpawner 会根据同步器的可见性来处理节点,只要 root_path 的节点是出生出来的。

内部而言,MultiplayerSynchronizer 使用 MultiplayerAPI.object_configuration_add 来通知同步开始,将位于 root_pathNode 作为 object 传入、将自己作为 configuration 传入。使用 MultiplayerAPI.object_configuration_remove 通知同步结束的方法相同。

注意:不支持对 ResourceObject 类型属性进行同步。对等体的唯一属性也无法进行同步,例如 Object 的实例 ID(见 Object.get_instance_id)或 RID

属性

float

delta_interval

0.0

bool

public_visibility

true

SceneReplicationConfig

replication_config

float

replication_interval

0.0

NodePath

root_path

NodePath(“..”)

VisibilityUpdateMode

visibility_update_mode

0

方法

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

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

VisibilityUpdateMode VISIBILITY_PROCESS_PHYSICS = 1

可见性过滤器的更新发生在物理帧中(见 Node.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()

两次增量同步之间的时间间隔。当设置为 0.0(默认值)时,每个网络处理帧都会发生增量同步。


bool public_visibility = true 🔗

  • void set_visibility_public(value: bool)

  • bool is_visibility_public()

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


SceneReplicationConfig replication_config 🔗

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


float replication_interval = 0.0 🔗

  • void set_replication_interval(value: float)

  • float get_replication_interval()

两次同步之间的时间间隔。当设置为 0.0(默认值)时,每个网络处理帧都会发生同步。


NodePath root_path = NodePath("..") 🔗

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

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


VisibilityUpdateMode visibility_update_mode = 0 🔗

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


方法说明

void add_visibility_filter(filter: Callable) 🔗

为该同步器添加对等体可见性过滤器。

filter 应该接受对等体 ID int,返回 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(默认值),则更新所有对等体的可见性。