Pull to refresh

Comments 24

Мне вот только не совсем понятно, для кого эта статья…
Для школьников которые делают онлайн шутер, убийц контерстрайка и бателфилда.

Код в статье сильно сложный, хоть он и объясняется по ходу прочтения статьи, но все равно можно было намного проще все сделать.
Я буду весьма рад, если мой код пригодится также и юным энтузиастам школьного возраста. Для заинтересованных в разработке программистов возраст не имеет значения. Спасибо за ваше мнение.
Нет, Вы ничего не подумайте, я не осуждаю или что-то еще.

За статью Вам огромное спасибо!
Меня как-то неадекватно восприняли. Я тоже делаю игру, тоже сетевую, при том что я не знаком с юнити, на то что бы понять, как там работает сеть и как нужно что-то сделать у меня лично ушло не более 10 минут, с учетом того, что я не гуру английского языка.
А вообще, при разработке игры на чем-то столь «complicated», как Unity, стоит сначала прочитать официальную докуметацию. В которой сетевой аспект раскрыт куда более подробно, нежели в Вашей статье… Вот я и не понимаю, для кого эта статья…
Не все такие как вы, чтоб «за 10 минут всё прочитать и изучить». За это время хотя что про Network View прочесть и в документации найти (по базовым понятиям устройства серверной части) команды создания сервера и коннекта клиента.

А статья например для такого случая как у меня- пока сетевик дописывает сервер, протоколы передачи и т. д. на клиентской части нужно по-быстрому состряпать сервер для «локального» теста и подготовки данных для передачи через сеть. А когда релиз на носу и жопа горит то не особо хочется тратить время на углубленное изучение этого.

Спасибо за статью! небольшая очепятка:
Таким образом, клиентская и серверная логика есть, теперь для нее нужно сделать управление MainMenu.cs:

public class MultiplayerMenu


За ссылку на VDC отдельный плюс) 7 лет сорсом страдал)
Правда куча нелогичных дырок в коде (как и писал сам автор), типа объект с этим id еще не был создан на клиенте, а сервер уже пытается не нему обратиться. Короче совсем всё печально.
Я правильно понимаю, что один из клиентов является и сервером?
Да, так же можно написать чтоб сервер выполнял конкретно свои задачи, к примеру в данном примере можно в файле ServerSide закомментировать строку SendMessage( «SpawnPlayer», «Player Server» ); а в GUI написать к примеру код который будет выкидывать игроков в лобби а потом снова их спаунить.
А Вам не кажется, что не очень разумно на сервере держать какие бы то ни было «префабы», модельки и GUI-слой, даже с точки зрения производительности
Если писать «чистый» сервер, конечно же тогда бы и лицензию на Unity, тогда можно вообще консольный написать, минимум затрат ресурсов. В моем комментарии всего лишь примитивный пример не претендующий на использование.
Зачем покупать лицензию, ради того, что бы написать сервер, когда его можно написать на чем угодно вообще?
Именно.
Оборотной стороной такой вот простоты то, что люди берут Unity + PhotonCloud. Все так красиво и удобно. И главное, очень быстро.
А в результате читеры всех достают в игре.
Отсюда мне всегда было интересно, зачем плодить такие туторы (их кстати миллион в инете), которых в реальной игре лучше избегать всеми способами?
Утрирую конечно, но это примерно как описывать способ забивания гвоздей железной трубой. Ну да, это возможно и труба не микроскоп, не сломается. Но в реальной жизни это мало где применимо и вообще, лучше взять молоток.
Пользуясь случаем хотел бы спросить, как в Unity реализованы такие фичи как client prediction и lag compensation?

Может быть также у кого-то есть какие-нибудь доброкачественные ссылки помимо трудов valve на эту тему? Особо интересует weapon prediction в случае НЕ моментальных выстрелов, работа с эффектами и звуками в обстановке всего этого хаоса. Желательно с низкоуровневыми подробностями, но не ниже хорошего минималистичного кода с хорошими комментариями.

В очень многом механика игры, ее восприятие зависят именно от реализации этих техник (или подобных). Как можно спрятать все это в каком-то движке от разработчика, не очень понятно. Если кто объяснит, буду благодарен.
В Unity никак не реализованы эти фишки.
Реализация целиком и полностью лежит на разработчике.
А посему, совершенно не важно, юнити это или нет, механизмы одни и теже, примеров в инете хватает.
А немогли бы вы поделиться ссылками на примеры хорошего кода. А то в теории всё сто раз описано, а вот хороших минималистичных примеров не встречал.
Не встречали, потому что их просто нет.
Просто понятия «client prediction, lag compensation» и «минималистичный» они как бы взаимоисключающие.
Просто не представляю себе премерчик в 10 строк кода…
Посмотрите исходники кваки, дума. Поищите хакерские эмуляции популярных игр, там в исходниках можно подсмотреть некоторые моменты…
Минималистичный это не когда в 10 строчек кода, а когда только игроки + физика + минимальный рендер (например как тут шарики по ландшафту).
Ну 10 строк, это я условно написал… просто минималистичный пример этот будет чуть ли не полной игрой…
Меняешь шарики на танки и выкладываешь в гуглплей)
Схемы client prediction и lag compensation обычно отлаживаются потом и кровью, вот никто и не выкладывает что называется «на халяву».
То есть вы из жадности не написали об этом в своей серии статей про создание игры? :)
Я не жадный, поэтому и писал статьи) Но многие да, скрывают все что можно…
Про interpolation и prediction вот тут есть неплохой пример: buildnewgames.com/real-time-multiplayer/. Правда демо у них протухло. Еще надо иметь ввиду, что prediction без lag compensation особо ничем не помагает. Угадайте, почему )

Вообще сейчас как раз разбираюсь со всем этим добром. Хочу сделать fast-pased пример, чтобы работал идеально на заданных характеристиках сети. Подводных камней много. Материала маловато. Все в основном дают ссылку на valve и говорят, что материала много. Там неплохо написано, но понять сложновато, пока сам все не напишешь :) Материала, конечно, много в исходниках дума и кваки. Только не каждый в состоянии его вдумчиво прочитать по тем или иным причинам.

Может дойдут руки доделать свой пример, тогда будет нормальная статья и какой-то код.
Да, у меня в черновиках уже пол года лежит недописанная статья на Scala+FLash.
Там правда без физики, движение по плоскости, но тем не менее хотел выложить полноценную демку с базовыми prediction и lag compensation…
Я пишу на js. Для прототипирования — очень удобно. Язык скриптовый — пишется быстрее + использование одного и того же языка на клиенте и сервере. Получается, что код моделирования мира не требуется дублировать.

Я позиционирю для себя это занятие как эксперимент, поэтому со временем понял, что в данной теме не так важна технология, сколько развернутое описание алгоритма(ов), красивые и понятные схемы взаимодействия с разными кейсами. И пример кода, демонстрирующий ограниченный набор фич.

После создания хорошей логической модели, можно уже писать на любом языке.
Sign up to leave a comment.

Articles