Поиск фотона не загружается в следующую сцену - PullRequest
0 голосов
/ 24 марта 2020

Итак, я последовал руководству по добавлению многопользовательской игры в фотоны, но у меня возникла проблема. Сначала я выбираю две сцены, такие как StartMenu, где вы просто добавляете поле имени игрока и продолжаете, и следующая сцена MainMenu, где вы выбираете комнату, создаете комнату или присоединяетесь к случайной комнате. Для первого шага я попытался присоединиться к случайной комнате, но когда я нажимаю «Пуск», игра просто запускает панель «Ожидание», не входя ни в какую игру (я тоже создаю игру в Xcode и открываю там, чтобы было больше одного игрока). Не знаю, что добавить к инспектору в кнопке «Пуск», чтобы запустить весь процесс с НАЙТИ ОПОНЕНТНОЙ ПАНЕЛИ - ПИТАНИЕ ОЖИДАНИЯ - НАПРАВЛЕННУЮ НА КОМНАТУ. не знаю почему, потому что я использовал Text -TEXT ME SH PRO для «Ожидания». В учебнике, который я использовал, было только одно StartMenu, где он поместил поле ввода и просто кнопку продолжения и добавил все эти сценарии. (Я выбираю то же самое для моей текстовой кнопки в MainMenu, но она не работает для перенаправления в комнату) enter image description here enter image description here enter image description here

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Photon.Pun;

public class PlayerNameInput : MonoBehaviour
{
    [SerializeField] private TMP_InputField nameInputField;
    [SerializeField] private Button continueButton;

    private const string PlayerPrefsNameKey = "PlayerName";

    private void Start()
    {
        SetUpInputField();
    }
    private void SetUpInputField()
    {
        if(!PlayerPrefs.HasKey(PlayerPrefsNameKey)) { return; }

        string defaultName = PlayerPrefs.GetString(PlayerPrefsNameKey);
        nameInputField.text = defaultName;

        SetPlayerName(defaultName);


    }
    public void SetPlayerName(string name)
    {
        continueButton.interactable = !string.IsNullOrEmpty(name);

    }
    public void SavePlayerName()
    {
        string playerName = nameInputField.text;
        PhotonNetwork.NickName = playerName;
        PlayerPrefs.SetString(PlayerPrefsNameKey, playerName);


    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using Photon.Pun;
using Photon.Realtime;

public class MainMenu : MonoBehaviourPunCallbacks
{
    [SerializeField] private GameObject findOpponentPanel = null;
    [SerializeField] private GameObject waitingStatusPanel = null;
    [SerializeField] private TextMesh waitingStatusText = null;

    private bool isConnecting = false;
    private const string GameVersion = "0.1";
    private const int MaxPlayersPerRoom = 3;

    private void Awake()
    {
        PhotonNetwork.AutomaticallySyncScene = true;
    }
    public void FindOpponent()
    {
        isConnecting = true;
        findOpponentPanel.SetActive(false);
        waitingStatusPanel.SetActive(true);
        waitingStatusText.text = "Searching...";
        if (PhotonNetwork.IsConnected)
        {
            PhotonNetwork.JoinRandomRoom();

        }
        else
        {
            PhotonNetwork.GameVersion = GameVersion;
            PhotonNetwork.ConnectUsingSettings();

        }
    }
        public override void OnConnectedToMaster()
    {
        Debug.Log("Connected to Master");
        if (isConnecting)
        {
            PhotonNetwork.JoinRandomRoom();

        }

    }
    public override void OnDisconnected(DisconnectCause cause)
    {
        waitingStatusPanel.SetActive(false);
        findOpponentPanel.SetActive(true);
        Debug.Log($"Disconnected due to :{cause}");


    }
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.Log("No clients are waiting for an opponent ,create a new room");
        PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = MaxPlayersPerRoom });

    }
    public override void OnJoinedRoom()
    {
        Debug.Log("Client successfully joined a room");
        int PlayerCount = PhotonNetwork.CurrentRoom.PlayerCount;
        if(PlayerCount != MaxPlayersPerRoom)
        {
            waitingStatusText.text = "Waiting for Opponent";
            Debug.Log("Client is waiting for an opponent");

        }
        else
        {
            waitingStatusText.text = "Opponent Found";
            Debug.Log("Matching is ready to begin");
        }
    }
    public override void OnPlayerEnteredRoom(Player newPlayer)
    {
        if(PhotonNetwork.CurrentRoom.PlayerCount == MaxPlayersPerRoom)
        {
            PhotonNetwork.CurrentRoom.IsOpen = false;
            waitingStatusText.text = "Opponent Found";
            Debug.Log("Match is ready to begin");
            PhotonNetwork.LoadLevel("RoomPlay");

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...