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