MultiplayerSynchronizer
将属性从多人游戏权威同步到远程对等体。
描述
默认情况下,MultiplayerSynchronizer 会将配置的属性同步到所有对等体。
可以使用 set_visibility_for 直接处理可见性,也可以通过 add_visibility_filter 和 update_visibility 在需要时进行处理。
MultiplayerSpawner 会根据同步器的可见性来处理节点,只要 root_path 的节点是出生出来的。
内部而言,MultiplayerSynchronizer 使用 MultiplayerAPI.object_configuration_add 来通知同步开始,将位于 root_path 的 Node 作为 object
传入、将自己作为 configuration
传入。使用 MultiplayerAPI.object_configuration_remove 通知同步结束的方法相同。
注意:不支持对 Resource 等 Object 类型属性进行同步。对等体的唯一属性也无法进行同步,例如 Object 的实例 ID(见 Object.get_instance_id)或 RID。
属性
| ||
| ||
| ||
| ||
|
方法
void | add_visibility_filter(filter: Callable) |
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 手动更新。
属性说明
两次增量同步之间的时间间隔。当设置为 0.0
(默认值)时,每个网络处理帧都会发生增量同步。
bool public_visibility = true
🔗
默认情况下,同步是否应该对所有对等体可见。有关配置细粒度可见性选项的方法,请参阅 set_visibility_for 和 add_visibility_filter。
SceneReplicationConfig replication_config 🔗
void set_replication_config(value: SceneReplicationConfig)
SceneReplicationConfig get_replication_config()
包含要同步的属性的资源。
float replication_interval = 0.0
🔗
两次同步之间的时间间隔。当设置为 0.0
(默认值)时,每个网络处理帧都会发生同步。
NodePath root_path = NodePath("..")
🔗
复制属性相对的节点路径。
如果 root_path 是由 MultiplayerSpawner 生成的,则该节点也将根据此同步器可见性选项生成和消失。
VisibilityUpdateMode visibility_update_mode = 0
🔗
void set_visibility_update_mode(value: VisibilityUpdateMode)
VisibilityUpdateMode get_visibility_update_mode()
指定何时更新可见性过滤器(有关选项见 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
。如果 peer
为 0
,则会改为更新 public_visibility 的值。
void update_visibility(for_peer: int = 0) 🔗
根据可见性过滤器更新 for_peer
的可见性。如果 for_peer
为 0
(默认值),则更新所有对等体的可见性。