В этой части на примере мода для Beat Saber мы рассмотрим общие принципы разработки модов для Unity-игр, узнаем, какие есть трудности, а также познакомимся с Harmony — библиотекой для модификации кода игр, которая используется в RimWorld, Battletech, Cities: Skylines и многих других играх.
Хоть эта статья и похожа на туториал, как написать свой мод для Beat Saber, ее цель — показать, какие принципы используются при создании любых пользовательских модов и какие проблемы приходится решать при разработке. Все, что здесь описано, с некоторыми оговорками применимо для всех Unity-игр как минимум в Windows.
У большинства игр нет официальной поддержки модов, но при этом постоянно появляются новости о том, как моддеры добавляют в игры новый контент. Часто речь идет о замене моделей, текстур или музыки, но бывают и полноценные новые игровые механики, т.е. моддеры внедряются в код игры и изменяют ее внутреннюю логику.
В этой статье мы рассмотрим, какие методы используется для того, чтобы игра, написанная на Unity, могла запускать сторонние моды: модификации библиотек игры и самого движка, подмена адресов в таблице импорта dll, вмешательство в загрузку Mono Runtime и другие.
В декабре 2018 мы с женой переехали из Санкт-Петербурга в Хельсинки. Уже есть довольно много статей и (видео)блогов о том, как живется в Финляндии и стоит ли сюда переезжать. Вместо этого я бы хотел рассказать ту часть истории, которая связана с самим переездом. Нам пришлось решить кучу вопросов разной степени важности, многие из которых возникали внезапно и не всегда имели очевидное решение. Мы постарались подытожить наш опыт в этом, не побоюсь этого слова, лонгриде. Его нельзя назвать ультимативным гайдом, так как любой опыт всегда индивидуален, но я очень надеюсь, что нам удалось пополнить выдачу гугла новыми ключевыми словами, и хотя бы одному человеку станет проще найти ответы. Здесь вы можете узнать, как можно найти работу в финской игровой индустрии, как начать работать до получения разрешения на работу, как подготовить документы до переезда, что оформить после переезда и какую информацию нужно предоставить российским государственным органам, чтобы не нарушить закон.
RxJava — это реализация ReactiveX для Java — библиотеки для асинхронной обработки потоков данных. Паттерн observable на стероидах, как они сами пишут. В интернете, в том числе на Хабре, есть много «введений в RxJava». Я хочу привести несколько примеров реальных задач. Они не очень сложные, но возможно кто-то увидит какие-то сходства со своими и задумается.
Собственно, задачи:
1. Простое клиентское TCP-соединение. Есть протокол поверх TCP/IP, нужно сформировать сообщение, подключиться к удаленному узлу, если еще не подключился, передать сообщение и прочитать ответ. Плюс обработка ошибок, проверка таймаутов, повтор отправки в случае неудачи. Жестких требований к производительности нет, трафик не большой.
2. Есть двигатель и некоторый датчик. Нужно произвести сканирование — пройтись двигателем по заданной траектории: послать двигатель к точке, дождаться, когда он к ней приедет, снять показания датчика, отобразить точку на графике (в GUI потоке), поехать к следующей точке…
3. Полученные после сканирования данные нужно обработать (условно длительный вычислительный процесс) и засунуть в pdf-отчет (условно длительный процесс ввода-вывода) вместе с изображением графика и данными введенными пользователем (GUI поток).