Я использую 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, а не клиент сборки, может добавлять Карта игроку
Я использую Unity и Netcode для игровых объектов. Я хочу создать свою собственную карточную игру, поэтому мне нужен синхронизированный список карт, который контролируется сервером/хостом. Для начала я хотел синхронизировать список (колоду) из какие отдельные клиенты могут удалять строки и добавлять их в свой список (PlayerCards). После этого колода должна быть синхронизирована для всех. [code]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();
[ServerRpc] private void CardServerRpc(ulong index) { if (Deck.Count >0) { AddCardsToPlayerCardClientRpc(new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new List { index } } }); UpdateCardsClientRpc(); } } } [/code] 2 балла: [list] [*]Если я вызываю от клиента ServerRpc, а ServerRpc вызывает ClientRpc, и у меня есть 2 Клиенты, не следует ли дважды вызывать отладку в консоли? Когда я нажимаю T, я вижу в консоли сообщение только от клиента, который использую в данный момент. [*]Только клиент, который я открываю в Unityeditor, а не клиент сборки, может добавлять Карта игроку [/list]