Что я хочу, так это когда игрок подключается к комнате, которую он выбирает, красный или синий (1 или 2) Максимальное количество игроков для каждой команды - 5, я отслеживаю игроков, используя такие переменные, как
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;
Прошу прощения, если это вопрос новичка, но я очень новичок, когда дело доходит до PUN, я потратил бесчисленное количество часов, пытаясь найти разные способы исправить это, но это примерно так же близко, как и я и я ударился о стену. Может ли кто-нибудь подсказать мне, как я могу заставить объекты каждого клиента обновлять друг друга, чтобы они могли правильно читать текущих игроков в комнате?