首页 > 解决方案 > 在客户端/服务器之间简单发送数据

问题描述

我试图在一个简单的多人游戏中发送数据,在这个例子中使用 Var1 和 Var2。Var1 应作为 Var2 发送并存储在其他用户的实例中。

我的代码有点工作,除了我认为服务器正在向自己发送数据并覆盖它接收到的数据,因为如果我加载客户端并初始化/发送数据,服务器会看到它。然后,如果我去服务器并初始化/发送数据,客户端会看到它。但是如果我回到客户端并发送数据,服务器将不再看到它。就像服务器既充当客户端又充当服务器。我在某处做错了吗?

public class mouseController : NetworkBehaviour
{
    GameLoop g;
void Start()
{
    GameObject thePlayer = GameObject.Find("Main Camera");
    g = thePlayer.GetComponent<GameLoop>(); 
}
void Update()
{

    if (!isLocalPlayer)
    {
        return;
    }

    if (isServer)
    {
        if (g.var1 > 0)
        {
            Rpcsenddata(g.var1);
        }
    }
    else
    { 
        if (g.var1 > 0)
        {
            Cmdsenddata(g.var1);
        }
    }
 }
    [Command]
    void Cmdsenddata(int i)
    {
        g.var2 = i;
    }
    [ClientRpc]
    public void Rpcsenddata(int i)
    {
        g.var2 = i;
    }
}

https://gyazo.com/b77e2ce35ec5f4d47147894c9430da03

(正在发送的数据是你对手选择的牌。服务器是右边的窗口)

标签: unity3dserverclientmultiplayer

解决方案


我想我通过添加一个 !isLocalPlayer 检查来修复它

[ClientRpc]
public void Rpcsenddata(int i)
{
    if (!isLocalPlayer) {  
        g.ehandSelected = i;
    }
}

推荐阅读