2016-03-28 13 views
1

unity3dのネットワークエンジンunetを使用して、ネットワーク経由でgameObjectのリストを同期しようとしています。リストはサーバー上で初期化され、オブジェクトが追加されます。私はこのリストをすべてのプレイヤー間で同期させて、1人のプレイヤーがそれを追加した場合、そのプレイヤーがネットワーク上で更新され、プレイヤーがそのアイテムをネットワーク上で更新するようにします。私はclientRPCまたはコマンドを使用するはずですが、私は具体的に使用する方法を理解することができません。このようなリストを同期させることができる良い例はありません。もし誰かが正しい方向に私を指すことができれば、それは素晴らしいだろう。Unity3d Unet sync gameObjectリスト

+0

synclist [here](http://docs.unity3d.com/Manual/UNetStateSync.html)を見つけることができます。 –

答えて

1

リストを操作したいクライアントは、サーバー上でコマンドを実行する必要があります。コマンドは、すべてのクライアントにリストの操作方法を伝えます。すべてのプレイヤーオブジェクトに以下のNetworkBehaviourがあるとします(これらのプレイヤーオブジェクトのそれぞれには、それぞれのクライアントにLocal Player Authorityがあります)。

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

関連する問題