Lan Многопользовательская Смена Сцены

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

К вашему сведению, я следовал официальному многопользовательскому руководству 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 = Джо
Игрок 2 = Боб
Игрок 3 = Билли
Игрок 4 = Джим

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

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

Спасибо всем

1 ответ

Решение

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

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

2-"Подделка" сцены, разбитой на лобби

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

Концепция:

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

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

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

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

-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

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