Вот ситуация: Пробовал написать игры без мультиплеера, но понял, что АИ у меня отнимет выше крыши производительности. По этому решил написать что-то вроде онлайн стрелялки (типо Танков Онлайн, но с человеком в качестве игрока). Воспользовался некоторыми уроками (не видео. текст.) Вот эти два скрипта (не считая стандартных CharacterController'ов) я использую:
Код
var remoteIP = "127.0.0.1"; var remotePort = 25000; var listenPort = 25000; var useNAT = false; var yourIP = ""; var yourPort = "";
function OnGUI () { if (Network.peerType == NetworkPeerType.Disconnected){
if (GUI.Button (new Rect(10,10,100,30),"Connect")){ Network.useNat = useNAT; Network.Connect(remoteIP, remotePort); } if (GUI.Button (new Rect(10,50,100,30),"Start Server")){ Network.useNat = useNAT; // Создание Сервера Network.InitializeServer(32, listenPort); // Сказать нашим объектам, что уровень и сеть готова к работе for (var go : GameObject in FindObjectsOfType(GameObject)) { go.SendMessage("OnNetworkLoadedLevel",SendMessageOptions.DontRequireReceiver); } } // Создаем поля ip адрес и port remoteIP = GUI.TextField(new Rect(120,10,100,20),remoteIP); remotePort = parseInt(GUI.TextField(new Rect(230,10,40,20),remotePort.ToString())); } else { // Получаем твой ip адрес и port ipaddress = Network.player.ipAddress; port = Network.player.port.ToString(); GUI.Label(new Rect(140,20,250,40),"IP Adress: "+ipaddress+":"+port); if (GUI.Button (new Rect(10,10,100,50),"Disconnect")) { // Отключение от Сервера Network.Disconnect(200); } } } function OnConnectedToServer () { // Сказать всем объектам что сцена и сеть готовы for (var go : GameObject in FindObjectsOfType(GameObject)) go.SendMessage("OnNetworkLoadedLevel",SendMessageOptions.DontRequireReceiver); }
и
Код
var PlayerPrefab : GameObject; var MinePlayer : GameObject;
function OnPlayerDisconnected (player : NetworkPlayer) { Network.RemoveRPCs(player, 0); Network.DestroyPlayerObjects(player); }
Мне надо каждый кадр перемещать Player'а на сервере, так, как он перемещается в скомпилированной игре и наоборот, перемещать игрока, запущеного с сервера, в скомпилированной игре. Какие строки мне черкнуть в скрипте Player'а? А так - же мне надо после отсоединения билда (скомпилированной игры) от сервера удалить Player'а, которого создал в билде. И еще: мне надо разделить Input (билд управляет своим игроком, а сервак - своим). Поскольку я первый раз пытаюсь написать онлайн игру, не судите строго и плиз, дайте как можно больше информации. Заранее спасибо!
Сообщение отредактировал VolkOrievith - Пт, 06 Дек 2013, 21:27
Всех с наступающим! seaman, Извините меня за мою тупость. Со всеми предыдущими вопросами разобрался, прочитав туториал. Там есть и ответы на другие вопросы, но тот файл, который прикреплен к туториалу, не совпадает с описанным в туториале. Там нет тех скриптов, которые названы в туториале. Я не могу решить такие вопросы как: сообщение о изменении переменной в скрипте всем клиентам; загрузка сцены со всеми обьектами, которые инстанциировались раньше на сервере; и т.п. Может у кого - нибудь завалялся в коллекции нужный проект с нужными скриптами, описанными в туториале? Или может подскажите, как решить мои проблемы?
Сообщение отредактировал VolkOrievith - Пн, 30 Дек 2013, 17:31
А как, если, допустим, я запустил сервер, там инстанциировал префаб (танк). Запускаю билд. С него подсоединяюсь к серверу. так-же инстанциирую танк. Сервер отображает и свой танк и танк клиента, а клиент отображает только свой танк, но если я удалю на сервере танк и респауню его заново, то и сервер и клиент его видят. Может есть специальная команда, или что-то еще, чтобы клиент запускал сцену с таким расположением объектов, как и на сервере? Или как кто-то подсоединяется, мне надо заново респаунить танки всех клиентов?
Я мультиплеер в последний раз делал 2 года назад, точно не помню всего, но помню что заново ничего респавнить не нужно. Каждый подключаемый вновь клиент должен получать информацию из буфера обо всех игроках и инстансах сервера. Рекомендую посмотреть это: M2H Networking Tutorial. X.cor.R (Prologue)
Левша, Я читал этот туториал. Скачал исходник. Там нет скриптов, описанных в туторе. Судя по тому, что в туториале написано, в скриптах есть ответы на мои вопросы. Например, вот цитата из тутора:
Tutorial 2B: Serever and client(s) play, with instantiating Сейчас мы разберёмся, как включить в процесс нескольких игроков и позволить им управлять своими кубиками. Запустите сцену «Tutorial 2/ Tutorial 2B» в редакторе как сервер и в двух веб-плеерах как игроков (коннектимся, то бишь). ГО PlayerCube был удалён из сцены. Вместо него теперь есть скрипт Tutorial_2B_Spawnscript.js, добавленный к гейобъекту Spawnscript, и мы инстансируем префаб, определённый в скрипте. Network.Instantiate принимает позицию, вращение и группу как аргументы. Мы копируем позицию и вращение объекта Spawnscripts и выставляем группу 0 (сейчас просто игнорируем этот параметр). При дисконнекте игрока наш скрипт удалит инстансированный объект. Тот, кто вызвал Network.Instantiate становится автоматически хозяином объекта. Соответственно, это игрок и управляет своим кубиком.
Я думаю, что посмотрев в скрипт "Tutorial_2B_Spawnscript.js", я мог бы увидеть что-то важное для себя. Повторяю еще раз: Есть у кого-нибудь скрипты для этого туториала?
Дак от туда и качал.Тутор, ссылку на который дал Левша, хотя я и раньше вышел на эту страницу и скачал от туда тутор с проектом. Я же не тупой. Скачивал проект там, где написано "Файлы проекта http://docs.unity3d.ru/Tutorials/M2H_Ne ... _Files.zip" Тутор качал в формате .docx Открыл, прочитал. Нет там таких скриптов! Не знаю почему.
У меня там обнаружило массу ошибок. Исправить их, конечно элементарно, но Вы то их исправили?
Можете объяснить для меня как их исправить. Вот ошибка:
Цитата
Assets/Standard Assets/Scripts/FPSChat.js(85,57): BCE0018: The name 'List' does not denote a valid type ('not found'). Did you mean 'UnityEngine.Light'?