Unity3d Unet同步gameObject列表
问题描述:
我想通过unity3d的网络引擎unet在网络上同步一个gameObjects的列表。列表在服务器上初始化并且对象被添加到它。我希望这个列表能够在所有玩家之间同步,这样如果单个玩家添加到其中,则其在整个网络中更新,并且如果玩家移除了其中的项目,则其在整个网络中更新。我明白我应该使用clientRPC或Commands,但是我无法弄清楚如何专门使用它们。没有好的例子,我可以找到像这样的列表同步。如果任何人都能指出我正确的方向,那就太好了。Unity3d Unet同步gameObject列表
答
希望操纵列表的客户端必须在服务器上执行一个命令,该命令将反过来告诉所有客户端如何操作列表。假设您在所有播放器对象上都有以下NetworkBehaviour(所有播放器对象都在其各自的客户端上具有本地播放器权限)。
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);
}
}
请注意,每个客户端都将拥有自己的本地副本:localCopyOfList
。另外,如果您无法保证目标对象具有NetworkIdentity组件,则可以改为给它们命名或ID或类似名称,并使用它们来传达要添加或删除的项目。
+0
谢谢,这真的有帮助,我想我现在得到它。 – MJC
你可以找到synclist [here](http://docs.unity3d.com/Manual/UNetStateSync.html)。 –