Наткнулся на проблему.
Использую Photon Cloud.
1) С одного клиента создаю комнату.
2) У него загружается уровень и появляется персонаж
3) Подключаюсь к комнате вторым клиентом.
4) У второго клиента загружается уровень и появляется персонаж.
5) Выключаю второй клиент.
6) Запускаю второй клиент.
7) Подключаюсь к комнате.
После этого уровень загружается, но персонаж не создается. Вываливается 14 ошибок. Первые из них:
1) Received unknown status code: QueueIncomingReliableWarning
2) Cannot send messages when not connected; Either connect to Photon OR use offline mode!
После этого слетают все RPC со второго клиента. У первого все в порядке.
Не понимаю в чем проблема.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using ExitGames.Client.Photon;
public class NetworkController : Photon.MonoBehaviour {
public string gameName; //Название комнаты. Если не определяется в редакторе, то при старте присваиваем сами.
public int maxPlayers = 5; // Максимальное количество игроков в комнате
string level = "spaceBox"; // Уровень который загружается при старте
bool drawRoomCreation;
bool drawRoomsList;
//Определяем размер и положение кнопок
private float btnX = Screen.width * 0.05f;
private float btnY = Screen.width * 0.05f;
private float btnW = Screen.width * 0.2f;
private float btnH = Screen.width * 0.2f;
void OnGUI()
{
//Отображаем статус подключения
GUI.Label (new Rect(Screen.width / 2f, Screen.height / 2f, 150f, 60f), "Connection: " + PhotonNetwork.connected);
//Отображаем количество игроков в лобби
GUI.Label (new Rect(Screen.width / 2f, (Screen.height / 2f) + 20, 100f, 60f), "Players in Lobby: " + PhotonNetwork.countOfPlayersOnMaster);
if(!PhotonNetwork.connected){
//Рисуем кнопку Connect
DrawConnectButton();
}
else
{
DrawDisconnectButton();
DrawRoomsButtons();
}
if(drawRoomsList)
{
DrawRoomsList();
}
if(drawRoomCreation)
{
Debug.Log ("Draw text field");
GUI.Box (new Rect(Screen.width / 2, Screen.height / 2, 150, 30), "");
gameName = GUI.TextField(new Rect(Screen.width / 2, Screen.height / 2, 150, 30), gameName, 25);
if(GUI.Button (new Rect(Screen.width / 2, (Screen.height / 2) + 40, 150, 30), "OK"))
{
string[] roomProperties = {"map", level};
Hashtable customRoomProperties = new Hashtable() {{"map", level}};
PhotonNetwork.CreateRoom(gameName, true, true, 20, customRoomProperties, roomProperties);
}
}
}
void DrawConnectButton ()
{
if(GUI.Button(new Rect(Screen.width / 2, (Screen.height / 2) - 60, 150, 60), "Connect to server"))
{
PhotonNetwork.ConnectUsingSettings("v1.0");
}
}
void DrawDisconnectButton ()
{
if(GUI.Button(new Rect(Screen.width - 150, (Screen.height / 2) - 60, 150, 60), "Disconnect"))
{
PhotonNetwork.Disconnect();
}
}
void DrawRoomsButtons ()
{
if(GUI.Button(new Rect(btnX, btnY, btnW, btnH), "Create Room"))
{
drawRoomCreation = true;
}
if(GUI.Button(new Rect(btnX, btnY * 1.2f + btnH, btnW, btnH), "Show availble Rooms"))
{
drawRoomsList = true;
}
}
void DrawRoomsList()
{
int _a = 0;
foreach(RoomInfo game in PhotonNetwork.GetRoomList())
{
if(GUI.Button(new Rect(30, 15 * _a + 3, 150, 40), game.name))
{
PhotonNetwork.JoinRoom(game);
_a++;
}
}
}
void OnCreatedRoom()
{
Debug.Log ("Room created");
PhotonNetwork.LoadLevel(level);
}
void OnJoinedRoom()
{
if(PhotonNetwork.connected)
{
PhotonNetwork.RemoveRPCs();
PhotonNetwork.LoadLevel(level);
}
}
void OnDisconnectedFromPhoton()
{
}
void OnFailedToConnectToPhoton(object parameters)
{
}
public void OnMasterClientSwitched(PhotonPlayer player)
{
}
public void OnReceivedRoomList()
{
}
public void OnReceivedRoomListUpdate()
{
}
public void OnConnectedToPhoton()
{
Debug.Log("OnConnectedToPhoton");
}
public void OnFailedToConnectToPhoton()
{
Debug.Log("OnFailedToConnectToPhoton");
}
public void OnPhotonInstantiate(PhotonMessageInfo info)
{
Debug.Log("OnPhotonInstantiate " + info.sender);
}
// Use this for initialization
void Start () {
PhotonNetwork.isMessageQueueRunning = false;
}
// Update is called once per frame
void Update () {
Debug.Log ("Network manager is alive");
}
}
using System.Collections;
using ExitGames.Client.Photon;
public class NetworkController : Photon.MonoBehaviour {
public string gameName; //Название комнаты. Если не определяется в редакторе, то при старте присваиваем сами.
public int maxPlayers = 5; // Максимальное количество игроков в комнате
string level = "spaceBox"; // Уровень который загружается при старте
bool drawRoomCreation;
bool drawRoomsList;
//Определяем размер и положение кнопок
private float btnX = Screen.width * 0.05f;
private float btnY = Screen.width * 0.05f;
private float btnW = Screen.width * 0.2f;
private float btnH = Screen.width * 0.2f;
void OnGUI()
{
//Отображаем статус подключения
GUI.Label (new Rect(Screen.width / 2f, Screen.height / 2f, 150f, 60f), "Connection: " + PhotonNetwork.connected);
//Отображаем количество игроков в лобби
GUI.Label (new Rect(Screen.width / 2f, (Screen.height / 2f) + 20, 100f, 60f), "Players in Lobby: " + PhotonNetwork.countOfPlayersOnMaster);
if(!PhotonNetwork.connected){
//Рисуем кнопку Connect
DrawConnectButton();
}
else
{
DrawDisconnectButton();
DrawRoomsButtons();
}
if(drawRoomsList)
{
DrawRoomsList();
}
if(drawRoomCreation)
{
Debug.Log ("Draw text field");
GUI.Box (new Rect(Screen.width / 2, Screen.height / 2, 150, 30), "");
gameName = GUI.TextField(new Rect(Screen.width / 2, Screen.height / 2, 150, 30), gameName, 25);
if(GUI.Button (new Rect(Screen.width / 2, (Screen.height / 2) + 40, 150, 30), "OK"))
{
string[] roomProperties = {"map", level};
Hashtable customRoomProperties = new Hashtable() {{"map", level}};
PhotonNetwork.CreateRoom(gameName, true, true, 20, customRoomProperties, roomProperties);
}
}
}
void DrawConnectButton ()
{
if(GUI.Button(new Rect(Screen.width / 2, (Screen.height / 2) - 60, 150, 60), "Connect to server"))
{
PhotonNetwork.ConnectUsingSettings("v1.0");
}
}
void DrawDisconnectButton ()
{
if(GUI.Button(new Rect(Screen.width - 150, (Screen.height / 2) - 60, 150, 60), "Disconnect"))
{
PhotonNetwork.Disconnect();
}
}
void DrawRoomsButtons ()
{
if(GUI.Button(new Rect(btnX, btnY, btnW, btnH), "Create Room"))
{
drawRoomCreation = true;
}
if(GUI.Button(new Rect(btnX, btnY * 1.2f + btnH, btnW, btnH), "Show availble Rooms"))
{
drawRoomsList = true;
}
}
void DrawRoomsList()
{
int _a = 0;
foreach(RoomInfo game in PhotonNetwork.GetRoomList())
{
if(GUI.Button(new Rect(30, 15 * _a + 3, 150, 40), game.name))
{
PhotonNetwork.JoinRoom(game);
_a++;
}
}
}
void OnCreatedRoom()
{
Debug.Log ("Room created");
PhotonNetwork.LoadLevel(level);
}
void OnJoinedRoom()
{
if(PhotonNetwork.connected)
{
PhotonNetwork.RemoveRPCs();
PhotonNetwork.LoadLevel(level);
}
}
void OnDisconnectedFromPhoton()
{
}
void OnFailedToConnectToPhoton(object parameters)
{
}
public void OnMasterClientSwitched(PhotonPlayer player)
{
}
public void OnReceivedRoomList()
{
}
public void OnReceivedRoomListUpdate()
{
}
public void OnConnectedToPhoton()
{
Debug.Log("OnConnectedToPhoton");
}
public void OnFailedToConnectToPhoton()
{
Debug.Log("OnFailedToConnectToPhoton");
}
public void OnPhotonInstantiate(PhotonMessageInfo info)
{
Debug.Log("OnPhotonInstantiate " + info.sender);
}
// Use this for initialization
void Start () {
PhotonNetwork.isMessageQueueRunning = false;
}
// Update is called once per frame
void Update () {
Debug.Log ("Network manager is alive");
}
}