Я делаю простой маленький MOBA просто для удовольствия. Я делал все для одного игрока, потом понял: «О, черт, наверное, мне стоит добавить мультиплеер».
Раньше я ничего не делал с сетями, поэтому изучение того, как интегрировать Лидгрена в мою игру, было забавным и удивительным. Дело в том, что я в значительной степени знаю, что я делаю что-то неправильно, потому что оно недостаточно надежно для использования в обычных играх, насколько я знаю, но что с ним не так?
Что я делаю, так это то, что когда игрок выполняет какое-либо действие, он отправляет на сервер сообщение: «Эй, я только что сделал это». На сервере и клиенте выполняется одно и то же моделирование. Затем сервер отправляет сообщение всем другим клиентам, сообщая им, что этот парень сделал это.
По большей части, за исключением нескольких случаев, когда игрок делает что-то, клиент полагает, что это круто, и делает это самостоятельно. Поэтому, когда вы щелкаете правой кнопкой мыши где-нибудь, чтобы переместиться туда, клиент этого игрока просто начинает перемещать туда своего парня, а затем отправляет сообщение на сервер, сообщая об этом.
Итак, в основном:
- Игрок 1 разыгрывает заклинание, чтобы заставить его двигаться на 100% быстрее в течение шести секунд
- Локальный клиент Player 1 добавляет этот бафф к своему объекту Unit
- Клиент Игрока 1 отправляет на сервер сообщение «Эй, я только что произнес это заклинание»
- Сервер проверяет, действительно ли у него достаточно маны, чтобы разыграть это заклинание, и если да, добавляет этот бафф к копии сервера этого объекта Unit.
- Сервер отправляет сообщение всем другим клиентам, говоря: «Эй, этот парень только что произнес это заклинание»
- Каждый другой клиент получает сообщение и говорит: «А, ладно, круто», и добавляет этот бафф к своему локальному объекту Unit для этого игрока.
Я пробежался по вещам, чтобы увидеть, как большие игры делают мультиплеер, и это немного сбивает с толку тех, кто только начинает баловаться с этим, но похоже, что движок Source отправляет пакет, содержащий все изменения, ко всему в Мир каждый тик? Опять же, совершенно новичок в этом деле, но можете ли вы действительно загружать столько данных так часто?
Извините, если это немного бессмысленно, но в основном мне было интересно, почему моя более простая система не подходит, потому что если бы это было, другие игры использовали бы ее, верно?