Как я могу создать специальный матч между двумя конкретными игроками в Unity Networking?

Unity Devs! Итак, я делаю многопользовательскую игру Quizz, в которой 2 игрока выбирают категорию, и они начинают матч, проблема в том, что я не смог сделать это с помощью сети Unity. вот мой код, чего я пытаюсь достичь:

Я звоню FindMatch() Функция, когда игрок выбирает категорию.

  1. Попытайтесь найти совпадение, когда игрок выбирает категорию, которая ищет эту категорию.
  2. если комнаты там не было, то игрок запускает комнату на 15 секунд, тогда, если никто не появился. они будут играть против ботов. если они нашли игру, которая не полна, они должны присоединиться.

в моем коде это просто создает комнату на каждом клиенте.. >>

public class MatchManager : NetworkBehaviour
{

    public static PlayerScript player;
    public static MatchManager Instance;
    public MatchInfoSnapshot currentMatch;
    public static int status = 0;
    public string categoryToFind;

    private void Awake()
    {
        Instance = this;
    }

    public void CreateCustomMatch(string roomName)
    {
        NetworkManager.singleton.matchMaker.CreateMatch(
                roomName,
                2,
                true,
                "", "", "", 0, 0,
                OnMatchCreate);
    }

    public void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo)
    {
        Debug.Log(success ? "Match creation success" : "Match creation failed");
        NetworkManager.singleton.matchMaker.JoinMatch(matchInfo.networkId, "", "", "", 0, 0, OnMatchJoinedHost);
    }

    public void FindMatch(string category)
    {
        NetworkManager.singleton.StartMatchMaker();
        Debug.Log("Looking for a " + category + " room that is open");
        categoryToFind = category;
        NetworkManager.singleton.matchMaker.ListMatches(0, 10, category, true, 0, 0, OnMatchList);
    }

    public void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> matches)
    {
        //Debug.Log("finding room: " + ((success) ? "success" : "failure"));
        foreach (MatchInfoSnapshot match in matches)
        {
            Debug.Log("Found " + match.name);
            if (match.currentSize < match.maxSize)
            {
                NetworkManager.singleton.matchMaker.JoinMatch(match.networkId, "", "", "", 0, 0, OnMatchJoined);
                return;
            }
        }   
        CreateCustomMatch(categoryToFind);
    }

    public void OnMatchJoinedHost(bool success, string extendedInfo, MatchInfo matchInfo)
    {
        NetworkManager.singleton.StartHost();
        Debug.Log("Joined match host");
    }

    public void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo)
    {
        if(isLocalPlayer)
        {
            NetworkManager.singleton.StartClient();
        }
    }

    int counter = 0;
    public override void OnStartClient()
    {
        counter++;
        base.OnStartClient();
        Debug.Log("Client " + counter + " Started");
        if(counter == 2)
        {
            CmdStartMatch();
        }
    }

    public override void OnStartServer()
    {
        base.OnStartServer();
        Debug.Log("Server Started");
    }
    public override void OnStartLocalPlayer()
    {
        base.OnStartLocalPlayer();
        Debug.Log("LocalPlayerConnected");
    }
    public void DestroyRoom()
    {
    }

    public void StopConnection()
    {
        if(isServer)
        {
            NetworkManager.singleton.StopHost();
            NetworkManager.singleton.StopServer();
        }

        if (isLocalPlayer)
            NetworkManager.singleton.StopClient();

        NetworkManager.singleton.StopMatchMaker();
    }

    [Command]
    public void CmdStartMatch()
    {
        RpcStartMatch();
        Debug.Log("StartMatch_ServerCommand");
    }

    [ClientRpc]
    public void RpcStartMatch()
    {
        Debug.Log("Start Match!");
        QuizzGame.isBot = false;
        UiManager.Instance.ShowQuizzScreenOnly();
        CategoryUI.joinedAmatch = true;
        QuizzGame.Instance.quizzStarted = true;
    }
}

0 ответов

Другие вопросы по тегам