WECHAT

扫码添加微信

YoungFan 微信二维码
← 返回 和平精英绿洲启元坑点记录
踩坑记录已完成

Multicast 能否收到取决于 Actor 是否存在

把 Multicast 发在 PlayerController 组件上时,其他客户端没有对应 Actor,因此收不到调用。

MulticastPlayerController网络复制

Multicast 是针对特定 Actor 的。只有这个 Actor 在所有客户端都存在时,基于它发出的 Multicast 才可能被所有客户端收到。

下面的调用来自挂在 PlayerController 上的组件:

function BP_PlayerInteractEntityComponent:ResponseToAllClients(
    playerKey, entityInstanceID, errCode, errMessage)
    if not UGCGameSystem.IsServer() then
        return
    end

    UnrealNetwork.CallUnrealRPC_Multicast(
        self,
        "RPC_Client_ResponseInteract",
        playerKey,
        entityInstanceID,
        errCode,
        errMessage
    )
end

每个客户端只拥有自己的 PlayerController,因此其他客户端不存在与发送端对应的这个 Actor,无法收到消息。

处理方式是通过所有客户端都存在的 GameState 中转,或者由服务端遍历所有 PlayerController 逐个发送。

Discussion

留言讨论

无需注册账号
正在加载留言区…

发表留言时,评论服务会记录必要的 IP 与 User-Agent 信息,用于安全审核和防止滥用。