Что я хочу, когда игрок подключается к комнате, в которой они выбирают команду Red или Blue (1 или 2) Максимальное количество игроков для каждой команды 5, я следить за игроками с помощью переменных, таких какPhoton Unity Networking (PUN) пытается отслеживать игроков в каждой команде
int currentRedPlayers = 0;
int maxRedPlayers = 5;
int currentBluePlayers = 0;
int MaxBluePlayers = 5;
Я имеющие много проблем синхронизации это по сети .. в настоящее время, что я делаю, когда вы присоединитесь номера создайте GameManagerObject для себя, используя PhotonNetwork.Instantiate. Предполагая, что вы первыми присоединились к серверу, переменные currentRedPlayers и currentBluePlayers будут установлены в 0. тогда, когда вы выбираете команду (скажем, вы выбираете красную команду) currentRedPlayers будет прыгать до 1, поэтому 4 переменные будут выглядеть так: это.
currentRedPlayers = 1;
maxRedPlayers = 5;
currentBluePlayers = 0;
MaxBluePlayers = 5;
это работает.
Теперь предположим, что второй игрок присоединяется и они выбирают синюю команду, их переменные будут
currentRedPlayers = 0;
maxRedPlayers = 5;
currentBluePlayers = 1;
maxBluePlayers = 5;
Мой путь пытается получить два клиента для обновления друг друга GameManagerObject в том, чтобы добавить представление фотона и есть это наблюдать сценарий объекта «GameManager» это сценарий:
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour
{
public int currentRedPlayers = 0;
public int maxRedPlayers = 5;
public int currentBluePlayers = 0;
public int maxBluePlayers = 5;
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
//player sends info to network data
stream.SendNext(currentRedPlayers);
stream.SendNext(currentBluePlayers);
}
else
{
//player recieves info from network data (isReading)
currentRedPlayers = (int)stream.ReceiveNext();
currentBluePlayers = (int)stream.ReceiveNext();
}
}
}
Это, как предполагается обновить GameManagerObject каждого клиента таким образом, что каждый из них будет читать переменные
currentredPlayers = 1;
maxRedplayers = 5;
currentBluePlayers = 1;
maxBluePlayers = 5;
, но вместо этого он будет показывать только свои собственные, если я запускаю клиент 1 в редакторе единства и клиента 2, как построить и запустить, я могу видеть в клиенте один в иерархии, что она показывает, как создает экземпляр GameManagerObjects для каждого игрок, и это показывает их правильные значения, как
int currentRedPlayers = 1;
int maxRedPlayers = 5;
int currentBluePlayers = 0;
int MaxBluePlayers = 5;
и
currentRedPlayers = 0;
maxRedPlayers = 5;
currentBluePlayers = 1;
maxBluePlayers = 5;
Но они НЕ обновлять друг друга. (Это то, что я хочу, чтобы это выглядело как)
int currentRedPlayers = 1;
int maxRedPlayers = 5;
int currentBluePlayers = 1;
int MaxBluePlayers = 5;
Я сожалею, если это новичок вопрос, но я очень так новичок, когда дело доходит до каламбура, я провел бесчисленные часы, пытаясь найти разные способы исправить это, но это примерно так же близко, как и я, и я ударил стену. Может кто-нибудь подскажет мне, как я могу обновлять объект каждого клиента друг друга, чтобы они могли правильно читать текущих игроков в комнате?
Вы должны использовать для этого RPC –
спасибо :) я попытался с помощью RPC раньше, но это будет только обновить один клиент, я потом сдался и попробовал то, что я писал в ОП. теперь, когда вы указали мне в правильном направлении, я сделал некоторые исследования и исправил проблему! спасибо – aLovedHater
Я бы сказал больше, если бы вы спросили lol, но если бы вы исправили его, это здорово! :) –