2015-11-18 2 views
1

Что я хочу, когда игрок подключается к комнате, в которой они выбирают команду 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; 

Я сожалею, если это новичок вопрос, но я очень так новичок, когда дело доходит до каламбура, я провел бесчисленные часы, пытаясь найти разные способы исправить это, но это примерно так же близко, как и я, и я ударил стену. Может кто-нибудь подскажет мне, как я могу обновлять объект каждого клиента друг друга, чтобы они могли правильно читать текущих игроков в комнате?

+0

Вы должны использовать для этого RPC –

+0

спасибо :) я попытался с помощью RPC раньше, но это будет только обновить один клиент, я потом сдался и попробовал то, что я писал в ОП. теперь, когда вы указали мне в правильном направлении, я сделал некоторые исследования и исправил проблему! спасибо – aLovedHater

+0

Я бы сказал больше, если бы вы спросили lol, но если бы вы исправили его, это здорово! :) –

ответ

1

Возможно, вы нашли ответ уже сейчас, но для кого-либо еще, просто используйте customproperties.

using System.Linq; 

public void team() 
{ 
    int redteam = 0, blueteam = 0; 
    PhotonNetwork.playerList.ForEach(x => { if (x.customproperties[teamproperty] == "red") redteam++; else if (x.customproperties[teamproperty] == "blue") bluetime++; }); 
} 
Смежные вопросы