Networking Unity3d Unet同步游戏对象列表

Networking Unity3d Unet同步游戏对象列表,networking,unity3d,multiplayer,unity5,Networking,Unity3d,Multiplayer,Unity5,我正在尝试使用unity3d的网络引擎unet在网络上同步游戏对象列表。列表在服务器上初始化,并向其中添加对象。我希望此列表在所有玩家之间同步,以便如果单个玩家添加此列表,其将在网络中更新,如果玩家删除其中的项目,其将在网络中更新。我知道我应该使用clientRPC或命令,但是我不知道如何具体使用它们。我找不到像这样同步列表的好例子。如果有人能给我指出正确的方向,那就太好了。希望操作列表的客户机必须在服务器上执行一个命令,该命令反过来会告诉所有客户机如何操作列表。假设您在所有播放器对象上都具有以

我正在尝试使用unity3d的网络引擎unet在网络上同步游戏对象列表。列表在服务器上初始化,并向其中添加对象。我希望此列表在所有玩家之间同步,以便如果单个玩家添加此列表,其将在网络中更新,如果玩家删除其中的项目,其将在网络中更新。我知道我应该使用clientRPC或命令,但是我不知道如何具体使用它们。我找不到像这样同步列表的好例子。如果有人能给我指出正确的方向,那就太好了。

希望操作列表的客户机必须在服务器上执行一个命令,该命令反过来会告诉所有客户机如何操作列表。假设您在所有播放器对象上都具有以下网络行为(所有这些对象在各自的客户端上都具有本地播放器权限)

public void列表操纵器:网络行为
{
公共无效添加列表(游戏对象obj)
{
如果(!isLocalPlayer)
抛出新的InvalidOperationException(“这只能为本地玩家调用!”);
if(obj.GetComponent()==null)
抛出新的InvalidOperationException(“网络只知道具有网络标识的游戏对象!”);
CmdAddToList(obj);
}
[命令]
void CmdAddToList(游戏对象对象对象)
{
//此代码仅在服务器上执行
RpcAddToList(obj);//在所有客户端上调用Rpc
}
[客户端RPC]
无效RpcAddToList(游戏对象obj)
{
//此代码在所有客户端上执行
localCopyOfList.Add(obj);
}
}
请注意,每个客户端都有自己的本地列表副本:
localCopyOfList


此外,如果您不能保证目标对象具有NetworkIdentity组件,您可以为它们指定名称或ID或类似的名称,并使用这些名称或ID来传达要添加或删除的项目。

您可以找到synclist。谢谢,这真的很有帮助,我想我现在已经知道了。
public void ListManipulator : NetworkBehaviour
{
    public void AddToList(GameObject obj)
    {
        if (!isLocalPlayer)
            throw new InvalidOperationException("This can only be called for the local player!");
        if (obj.GetComponent<NetworkIdentity>() == null)
            throw new InvalidOperationException("Network only knows about GameObjects that have a NetworkIdentity!");

        CmdAddToList(obj);
    }

    [Command]
    void CmdAddToList(GameObject obj)
    {
        // this code is only executed on the server
        RpcAddToList(obj); // invoke Rpc on all clients
    }

    [ClientRpc]
    void RpcAddToList(GameObject obj)
    {
        // this code is executed on all clients
        localCopyOfList.Add(obj);
    }
}