1. 程式人生 > >【Unet】客戶端同步GameObject 列表

【Unet】客戶端同步GameObject 列表

Unity 內建 同步變數 支援同步一些資料型別 

同步變數可以是基礎型別,如整數,字串和浮點數。也可以是Unity內建資料型別,如Vector3和使用者自定義的結構體,但是對結構體型別的同步變數,如果只有幾個欄位的數值有變化,整個結構體都會被髮送。每個NetworkBehaviour指令碼可以有最多32個同步變數

但是要是 同步 GameObject 列表呢? 

其實很巧妙

 有個前提只能同步 LocalPlayer

  public List<GameObject> localCopyOfList = new List<GameObject>();

    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);
    }