Что посоветуете для написания сервера под мультиплеерную 3d игру на Unity?

Доброго времени суток!)
Я планирую сделать простой мультиплеерный 3d шутер на Unity, собственно от сюда возникает вопрос:
Как написать сервер (буду писать на C#) у меня очень не большой опыт в разработке клиент-серверных приложений только многопоточный чат(TCP), и я практически не имею представления как реализовать взаимодействие игроков с сервером.

Что нужно будет синхронизировать:
1) Позицию игрока в пространстве, его поворот и наклон оружия.
2) Смена оружия.
3) Стрельба (синхронизация точки спавна пули).
4) Чат (в принципе не обязательно, если я смогу сделать первые 3 пункта то с чатом проблем думаю не возникнет).

Моя идея как это реализовать:
1) Под каждого игрока, разумеется есть свой поток.
2) Сервер должен перед рассылкой действий пользователя проверить их на правильность (античит так сказать).
Когда игрок будет подключатся к серверу, 1-ое что он должен будет передать, это свой идентификатор(к примеру название gameobject'a в Unity) в игровой комнате, а первое сообщение которое он должен получить это позиции других игроков. Далее нужно как-то передавать новую позицию игрока вместе с поворотом(это вроде проблем не вызывает, можно передавать 1 сообщением "позиция/поворот/наклон"), а что если игрок будет на ходу поворачиваться и стрелять, это тоже передавать 1 сообщением после паaрсить команды и отправлять их на проверку, если они верны рассылать другим игрокам иначе выдать предупреждение игроку а после 3-ех кикать?
Как вам?

Мне бы что нибудь почитать по реализации серверов для шутеров или подобных игр исходники или документацию(на любом языке не обязательно на C#), теории я уже начитался но вот все есть сомнения по реализации сервера.

P.S. Я знаю что есть UNet, и т.п. но я пишу собственный сервер ради интереса и опыта)
P.P.S. Спасибо всем за все ;)
  • Вопрос задан
  • 1103 просмотра
Пригласить эксперта
Ответы на вопрос 6
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Latency:
1. client-side prediction server reconciliation (Main article)
2. client-side prediction (live demo!)
3. Latency Compensating Methods (Valve wiki)
4. www.newspeakblog.com/lag-compensation-techniques-g...

Anti-cheat:
1. Anti-cheat (Valve wiki)
2. Hacking in Games (PDF)

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

Допустимое, определяется через обученную НС на нескольких случайных перемещениях игрока из одной точечной позиции в случайные стороны (и под различными углами, если это 3D) с различными параметрами (грунт, гравитация, прыжок, ходьба/бег и т.д.) между соседними позициями за один игровой кадр ("тик").
И как только игрок набирает N-штрафных баллов (3-5 достаточно) - фиксируется чит.

Server (open source):
1. socketo.me (Ratchet - WebSockets for PHP)
2. https://heroiclabs.com/

И как всегда, БОНУС: здесь и почитать.
Ответ написан
@Senture Автор вопроса
Ребят всем спасибо за все ваши советы. Я уже имею представление в написание сервера, еще я вычитал что использование tcp в action играх очень плохо сказывается на ping'е, вот сижу изучаю udp который лучше подойдет для этого.
Ответ написан
Anubis
@Anubis
Люблю корейскую кухню и веб-разработку
Недавно интересовался вопросом. Пришёл к выводу, что наиболее простой подход, дающий относительно хороший результат - использовать сервис Photon Unity Network. Сервис берёт на себя вопросы связи, синхронизации, матчмейкинга и выбора наиболее быстрого и близкого к игроку регионального мастер-сервера. До 20 онлайн предоставляется бесплатно - вполне достаточно при разработке и тестировании.
Ответ написан
Freezy_Spurt
@Freezy_Spurt
Если без unet,то используйте litenetlib(библиотека udp на c#) или unity transport layer api.
Ответ написан
riky
@riky
Symfony / Laravel
по нормальному карта должна быть и на серваке, чтобы игроки не могли ходить сквозь стены например.
еще в данной задаче не очень очевидно с начала, но важно делать предсказание движения противников на клиенте.
недостаточно просто передавать пересчитанные координаты игроков с сервера, нужно еще делать предпросчет на клиенте, иначе играть будет невозможно, позиция игрока-противника постоянно будет опаздывать. в быстрых играх это не допустимо.

советую почитать вот этот цикл статей.
https://habr.com/post/302394/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
HyperQuant Москва
от 120 000 руб.
от 3 000 до 4 500 eur.
Аскон Санкт-Петербург
от 130 000 руб.
23 окт. 2018, в 12:31
1000 руб./за проект
23 окт. 2018, в 12:08
1200 руб./за проект
23 окт. 2018, в 11:59
500 руб./за проект