Попробуйте синхронизировать списки между клиентами и клиентом/хостом.C#

Место общения программистов C#
Anonymous
Попробуйте синхронизировать списки между клиентами и клиентом/хостом.

Сообщение Anonymous »

Я использую Unity и Netcode для игровых объектов. Я хочу создать свою собственную карточную игру, поэтому мне нужен синхронизированный список карт, который контролируется сервером/хостом.
Для начала я хотел синхронизировать список (колоду) из какие отдельные клиенты могут удалять строки и добавлять их в свой список (PlayerCards). После этого колода должна быть синхронизирована для всех.

Код: Выделить всё

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Netcode;

public class PlayerNetwork : NetworkBehaviour
{
//Cards in the Deck to draw
List Deck = new List();
//Cards on each Player
List PlayerCards = new List();

private void Start()
{
Deck.Add("Card1");
Deck.Add("Card2");
Deck.Add("Card3");
Deck.Add("Card4");
Deck.Add("Card5");
}
void Update()
{
if (!IsOwner)
{
return;
}
if (Input.GetKeyDown(KeyCode.T))
{
CardServerRpc(OwnerClientId);
}
}
[ClientRpc]
private void UpdateCardsClientRpc()
{
Deck.RemoveAt(0);
Debug.Log("Id:" + OwnerClientId);
}
[ClientRpc]
private void AddCardsToPlayerCardClientRpc(ClientRpcParams clientRpcParams)
{
Debug.Log("Id:" + OwnerClientId +"Card:" + Deck[0]);
PlayerCards.Add(Deck[0]);
}

[ServerRpc]
private void CardServerRpc(ulong index)
{
if (Deck.Count >0)
{
AddCardsToPlayerCardClientRpc(new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new List { index } } });
UpdateCardsClientRpc();
}
}
}
2 балла:
  • Если я вызываю от клиента ServerRpc, а ServerRpc вызывает ClientRpc, и у меня есть 2 Клиенты, не следует ли дважды вызывать отладку в консоли? Когда я нажимаю T, я вижу в консоли сообщение только от клиента, который использую в данный момент.
  • Только клиент, который я открываю в Unityeditor, а не клиент сборки, может добавлять Карта игроку


Подробнее здесь: https://stackoverflow.com/questions/785 ... lient-host

Вернуться в «C#»