Lan Многопользовательская Смена Сцены - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в Unity и сейчас пытаюсь создать многопользовательскую RPG-игру для локальной сети.

К вашему сведению, я следовал официальному многопользовательскому руководству Unity Lan, и все прошло хорошо. https://unity3d.com/learn/tutorials/topics/multiplayer-networking/introduction-simple-multiplayer-example

Пока у меня есть игроки для загрузки, и они могут двигаться. Я написал следующий код ниже (под подпрограммой void update), чтобы, когда игрок двигался, он рандомизировал число от 1 до 50 каждую 1 секунду, а если число было 25, мы случайно «встретили врага». Когда любой игрок сталкивается с врагом, я сделал это так, чтобы все в сети выходили на «сцену битвы».

if (Input.GetKey("up") || Input.GetKey("down") || Input.GetKey("left") || Input.GetKey("right"))
    {
        if (Time.time > NextActionTime)
        {
            NextActionTime = Time.time + Period;
            EnemyEncounter = Random.Range(1, 50);
            if (EnemyEncounter == 25)
            {

                NetworkManager.singleton.ServerChangeScene("Scene2");
            }
        }
    }

Приведенный выше код работает нормально, но я не уверен, как вместо загрузки всех загружать на сцену сражения только определенных игроков.

Например:
Игроки вводят имя перед игрой Hosting / Finding LAN


Игрок 1 = Джо
Player 2 = Боб
Player 3 = Билли
Игрок 4 = Джим

На предустановленной метке / тексте, который загружает в нее текст со словами «Джо, Билли». Теперь, когда ЛЮБОЙ игрок обнаруживает столкновение, я хочу загрузить ТОЛЬКО имена игроков «Джо» и «Билли» в следующую сцену, а другие нет.

Возможно ли это? Любая помощь будет принята с благодарностью.

Спасибо всем

1 Ответ

0 голосов
/ 02 июля 2018

Я пробовал разные идеи, и у меня было 2 разных подхода:

1-Как я уже рассказывал в комментариях, попробуйте nestobbyManagers

2- "Подделка" раскола сцены на lobbys

1. Вложенные лобби

Концепция:

  • Первая сцена, MainLobby, 4 игрока входят и переходят ко второй сцене

  • Вторая сцена, MainGame + SecondLobby, есть 4 игрока, пришедших из первой сцены, но теперь 2 из них хотят перейти в третью сцену, поэтому они используют SecondLobby, чтобы снова найти матч.

  • Третья сцена, Вторая игра.

Это лучший подход, я думаю, если мы говорим о производительности, но это сложная причина:

-Actual Unity NetworkLobby использует шаблон синглтона, поэтому вам необходимо снова кодировать синглтон-части.

-LobbyManager построен с DontDestroyOnLoad, так что вы заряжаете другое лобби на следующей сцене.

-Я действительно не знаю, можете ли вы вернуться из третьей сцены ко второй: S

2. Поддельные сцены

Ну, добро пожаловать в «грязные трюки», вторая концепция:

  • Первая сцена, MainLobby, 4 игрока входят и переходят ко второй сцене

  • Вторая сцена, MainGame, 4 игрока пришли из первой сцены, но теперь 2 из них хотят перейти в третью сцену.

  • Третья сцена, SecondGame.

Но вместо того, чтобы снова "matchmake", мы добавляем сцену как аддитивную сцену, но с разными координатами, и перемещаем 2 игроков, которые хотят сражаться, в третьей сцене. Таким образом, игроки будут думать, что они находятся на другой сцене, но они не просто двигаются. Думает, чтобы иметь в виду:

-Может быть, вам не нужно использовать аддитивную сцену, просто строить на одной сцене, на разных координатах. (https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html)

-Подумайте, что они все еще являются 4 сетевыми игроками на одной сцене, поэтому, возможно, вы захотите «отключить» некоторые сетевые сообщения, чтобы влиять только на некоторых игроков на определенных «сценах». (https://docs.unity3d.com/ScriptReference/Networking.NetworkClient.Send.html)

Но если вы достигнете какого-то другого подхода, дайте мне знать, это действительно дает интересные вещи для дизайна игры! : D

...