跳转至

Godot 网络 — 快速参考

最后验证:2026-02-12 | 引擎:Godot 4.6

自约 4.3(LLM 截止)以来的更改

4.6 更改

  • 破坏性变更中的网络部分:请参阅官方迁移指南,了解 4.5→4.6 版本的具体变更。

4.5 更改

  • 无重大网络 API 破坏性变更 — 核心多人游戏 API 保持稳定

当前 API 模式

高级多人游戏

# Server
func host_game(port: int = 9999) -> void:
    var peer := ENetMultiplayerPeer.new()
    peer.create_server(port)
    multiplayer.multiplayer_peer = peer
    multiplayer.peer_connected.connect(_on_peer_connected)
    multiplayer.peer_disconnected.connect(_on_peer_disconnected)

# Client
func join_game(address: String, port: int = 9999) -> void:
    var peer := ENetMultiplayerPeer.new()
    peer.create_client(address, port)
    multiplayer.multiplayer_peer = peer

RPC 调用

# Server-authoritative pattern
@rpc("any_peer", "call_local", "reliable")
func request_action(action_data: Dictionary) -> void:
    if not multiplayer.is_server():
        return
    # Validate on server, then broadcast
    _execute_action.rpc(action_data)

@rpc("authority", "call_local", "reliable")
func _execute_action(action_data: Dictionary) -> void:
    # All peers execute the validated action
    pass

MultiplayerSpawner 与 MultiplayerSynchronizer

# Use MultiplayerSpawner for automatic node replication
# Use MultiplayerSynchronizer for property synchronization

# MultiplayerSynchronizer setup:
# 1. Add as child of the node to sync
# 2. Configure replication properties in editor
# 3. Set visibility filters for relevancy

SceneMultiplayer 配置

func _ready() -> void:
    var scene_mp := multiplayer as SceneMultiplayer
    scene_mp.auth_callback = _authenticate_peer
    scene_mp.server_relay = false  # Direct peer connections

func _authenticate_peer(id: int, data: PackedByteArray) -> void:
    # Custom authentication logic
    pass

常见错误

  • 未在客户端到服务器的 RPC 中使用 "any_peer"(默认仅限 authority/权威)
  • 信任客户端数据而未在服务器端进行验证
  • 将 "unreliable" 用于游戏状态变更(仅应将其用于位置更新)
  • 未在生成的节点上设置多人游戏 authority(set_multiplayer_authority())

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/Claude-Code-Game-Studios