Как вращать объекты в Two Point Hospital

При создании и расширении вашей больницы в Two Point Hospital вам нужно будет переместить довольно много вещей. Переносите ли вы вещи в коридорах или самих комнатах, размещение практически любого предмета имеет значение. Это может сделать доступ к палатам и определенным функциям намного проще или сложнее для ваших сотрудников или пациентов. Вот как можно вращать предметы в Two Point Hospital.
Как вращать объекты в Two Point Hospital
Есть два способа вращать объекты в Two Point Hospital. Во-первых, вы можете нажать Z или X на ПК или, удерживая левую кнопку мыши, перетащить ее влево или вправо. Если вы просто щелкнете левой кнопкой мыши, вы поместите предмет или комнату вместо того, чтобы изменить ее вид. Если вы играете в игру на консоли, вам нужно будет нажать L или R на Nintendo Switch, L1 или R1 на PlayStation и LB или RB на Xbox.

При чередовании предметов убедитесь, что вы размещаете их в местах, где они не блокируют доступ ваших сотрудников или пациентов к другим вещам. Например, если вы перевернете скамейку и случайно перекроете путь в ванную, у вас может возникнуть поток несчастных случаев, и вашим дворникам придется убирать вокруг больницы. Кроме того, не забывайте о планировке комнат. Затруднение прохода к двери комнаты может замедлить ваши операции и нанести ущерб вашей прибыли.
Как я управлял госпиталем…
в игре под названием — как ни странно — Project Hospital (2018).
Что это? Серьёзный вариант Theme Hospital — с настоящими болезнями, симптомами и кровищей.
В игре нам дают развлекаться в кампании из нескольких миссий, испытаний и песочницы. А в курс дела пытается ввести коротенькое обучение.
С песочницей всё и так понятно, испытание — надо ежедневно вылечивать 90% увеличивающегося потока пациентов в течении 10 суток. Так что я остановлюсь подробнее на кампании.
В миссиях кампании страховые агенства дают нам набор заданий, а за выполнение награждают бонусами.
От трёх оригинальных миссий кампании возникает смешанное впечатление, прежде всего из-за того, что нам дают полуготовую больницу. Попробуй разобраться, что к чему, когда у тебя несколько десятков кабинетов и полсотни сотрудников!
Добавляет фрустрации и недружелюбный для новичка интерфейс. Нанимать персонал можно только через свободное место в кабинете, загруженность кабинетов пишется мелкими буквами, часто невидными из-за объектов и стен, а сами кабинеты приходится искать по иконкам .–.
Ко всему прочему, любой сложный менеджмент персонала просто угнетает. Например, врач может пойти пить чай и никто не придёт на замену. Или лаборанта в ночную смену надо вручную перебрасывать на полусменок по кабинетам.
Впрочем, ко всему привыкаешь.
Новичкам же советую начать с кампании из бесплатного дополнения Doctor Mode. В кампании всего одна миссия, зато какая!
Нам дают большую больницу, но почти ничего в ней не работает. И мы постепенно получаем разрешения от страховых компаний на открытие и расширение новых отделов. В кои-то веки можно разобраться, что, как и зачем.
Не менее интересен и сам режим доктора. Мы можем взять под контроль докторов и самим принимать решение, что за болезнь у пациента, с какими симптомами стоит бороться, какие процедуры и лечение назначить. Причём можно взять какого-нибудь интерна с хорошими чертами характера и обучать его. Так сказать, почувствуй себя доктором Хаусом 🙂
Хотя порой реалистичность происходящего играет злую шутку. Вот приходит к тебе пациент и жалуется на жар. А игровое «око бога» показывает, что у пациента есть ещё всего один симптом. Первичный осмотр ничего не находит, анализ крови тоже. Ну и чё с ним делать? Гонять по всем кабинетам? А потом вспоминаешь реальность и становится грустно.
Тут же за этой рутиной начинаешь понимать, зачем вообще нужны те или иные кабинеты и в каких количествах. Ведь одна из важных вещей в финансовом балансе — не нанимать лишних сотрудников, иначе можно улететь в минус. Впрочем, поправить финансовое положение и занять бездельников помогают случайные события: в городе то и дело что-то случается, и к нам отправляют пачки пациентов. Вылечил всех — получи кругленький бонус и плюс в репутацию.
Стоит ещё сказать несколько слов о строительстве. В целом оно осталось на уровне дремучих годов, если бы не одно «но». В игре уже заботливо спроектированы все кабинеты, иногда даже в нескольких вариациях по размеру. Так что если нет желания возиться с расстановкой объектов, то можно использовать уже готовый шаблон. Или же сделать свой.
В целом здания довольно кабанистые, так что госпиталь быстро разрастается ввысь, благо никакие глупые законы физики не сдерживают фантазию 🙂
Интересный опыт, хотя в игре и чувствуется бюджетность, к которой надо ещё привыкнуть.
А в честь чехословацкой недели сейчас базовая игра продаётся в Стиме со скидкой (почему я её и урвал 🙂
Как мы оптимизировали свой Theme Hospital под разные платформы

Project Hospital — это игра об управлении зданием больницы со всеми стандартными аспектами жанра: динамическими сценами, создаваемыми игроком, множеством активных персонажей и объектов, развёрнутой системой UI. Чтобы заставить игру работать на разном оборудовании, нам пришлось приложить много усилий, и это стало отличным примером печально известной «смерти от тысячи порезов» — множества мелких шагов, решающих кучу очень специфических проблем и кучи времени, потраченного на профилирование.
Уровень производительности: чего мы хотели достичь
На раннем этапе разработки мы определились с основными параметрами: максимальной величиной сцен, уровнем производительности и системными требованиями.
Мы поставили перед собой задачу обеспечить поддержку не менее сотни активных и полностью анимированных персонажей на одном экране, трёх сотен активных персонажей суммарно, тайловых карт размером примерно 100×100 и до четырёх этажей в здании.
Мы твёрдо были уверены, что игра должна работать в 1080p с приличной частотой кадров даже на интегрированных графических картах, и саму по себе эту цель достичь было не так трудно: основным ограничивающим фактором является ЦП, особенно при увеличении объёмов больницы. Современные интегрированные видеокарты начинают испытывать проблемы только при разрешениях примерно от 2560 x 1440.
Чтобы упростить поддержку модов, бОльшая часть данных сделана открытой, то есть нам пришлось пожертвовать производительностью, достигаемой благодаря упаковке файлов, но это не оказало особо сильного влияния, за исключением чуть увеличившегося времени загрузки.
Графика
Project Hospital — это «классическая» изометрическая 2D-игра, поэтому можно понять, что всё отрисовывается сзади вперёд — в Unity это реализуется заданием соответствующих значений по оси Z (или расстояния до камеры) для отдельных графических объектов. По возможности не взаимодействующие друг с другом объекты упорядочиваются в слои, например, полы не зависят от объектов и персонажей.

Вся геометрия в изометрически рендерящейся сцене динамически создаётся на C#, поэтому одним из двух наиболее важных аспектов для производительности графики является частота перестроения геометрии. Второй аспект — это количество вызовов отрисовки (draw calls).
Вызовы отрисовки
Количество отрисовываемых в одном кадре отдельных объектов, вне зависимости от их простоты — это главное ограничение, особенно на слабом оборудовании (кроме того, сам движок Unity добавляет избыточное потребление ресурсов). Очевидным решением является группирование (батчинг) по возможности нескольких графических объектов в один вызов отрисовки. Так можно получить довольно интересные результаты, например, сгруппировать объекты, находящиеся на одинаковом расстоянии от камеры, чтобы вся остальная графика правильно рендерилась за или перед ними.

Вот немного цифр: на карте размером 96 x 96 тайлов теоретически можно разместить 9216 объектов, для чего потребуется 9216 вызовов отрисовки. После батчинга это число снижается до 192.
Однако в реальной жизни всё немного сложнее, потому что можно группировать только объекты с одинаковой текстурой, из-за чего результаты оказываются немного менее оптимальными, но система всё равно работает достаточно хорошо.

БОльшая часть батчинга выполняется вручную, чтобы иметь контроль за результатами. Кроме того, в крайнем случае мы также пользуемся динамическим батчингом Unity, но это палка о двух концах — он и в самом деле помогает снизить количество вызовов отрисовки, но приводит к излишней трате ресурсов в каждом кадре, а в некоторых случаях может быть непредсказуем. Например, два наложенных друг на друга спрайта на одинаковом расстоянии от камеры в разных кадрах могут рендериться в различном порядке, что вызывает мерцание, которого при батчинге вручную не появляется.
Многоэтажность
Игроки могут строить здания с несколькими этажами, и это повышает сложность, но, на удивление, помогает производительности. Рендерить и анимировать нужно только персонажей на активном этаже и на улице, а всё на других этажах больницы можно скрыть.
Шейдеры
В Project Hospital используются относительно простые самописные шейдеры с небольшими трюками, например, заменой цвета. Допустим, шейдер персонажа может заменять до пяти цветов (в зависимости от условий в коде шейдера), а потому довольно затратен, но это, похоже, не вызывает проблем, потому что персонажи редко занимают много места на экране. Шейдер оправдал вложенные в него усилия, потому что возможность использования бесконечного количества цветов одежды позволяет сильно повысить вариативность персонажей и окружения.
Кроме того, мы достаточно быстро научились избегать задания параметров шейдеров и вместо этого использовали по возможности цвета вершин.
Качество текстур
Интересный факт — в Project Hospital мы не используем никакого сжатия текстур: графика выполнена в векторном стиле, и на некоторых текстурах сжатие выглядит очень плохо.
Для экономии памяти ЦП в системах с менее 1 ГБ мы автоматически уменьшаем размер внутриигровых текстур до половинного разрешения (за исключением текстур интерфейса пользователя) — это можно понять, увидев в опциях параметр «texture quality: low». Для текстур UI сохраняется исходное разрешение.
Оптимизация производительности процессора — многопоточность
Хотя логика скриптов Unity по сути является однопоточной, мы всегда имеем возможность запустить несколько потоков непосредственно в C#. Возможно, такой подход не подойдёт для игровой логики, но часто существуют не критичные ко времени задачи, которые можно выполнять в отдельных потоках, организовав систему задач. В нашем случае потоки использовались для двух функций:
1. Задачи поиска пути, особенно на больших картах с запутанным расположением, могут занимать до сотен миллисекунд, поэтому это был основной кандидат на перенос из основного потока. Параллельные задачи учитывают количество аппаратных потоков машины.
2. Карты освещения тоже можно обновлять в отдельном потоке, но только по одному этажу за раз — это не критичная система, а автоматические лампы в комнатах гаснут с такой скоростью, для которой достаточно редкого обновления.
Анимации
Почти в самом начале разработки мы решили использовать двухмерную скелетную систему анимаций. Изучив различные современные программы анимации, мы в конечном итоге приняли решение модифицировать простую систему, созданную мной несколько лет назад (по сути в качестве хобби-проекта), подстроив её под нужды Project Hospital — она напоминает упрощённый Spine с прямой поддержкой создания вариаций персонажей. Аналогично Spine она использует исполняющую среду C#, что очевидно более затратно, чем нативный код, поэтому в процессе разработки мы провели пару циклов оптимизаций. К счастью, наши риги довольно просты, всего около 20 костей на персонажа.
Любопытный факт: самым полезным улучшением при оптимизации доступа к transform отдельных костей оказался переход от поиска по карте к простому индексированию массивов.

Кроме того, что персонажи не анимируются за пределами камеры, есть ещё один трюк: персонажей, скрытых за окнами основного UI, тоже анимировать не нужно. К сожалению, в финальной версии игры мы перешли к полупрозрачному UI, поэтому использовать его не удалось.
Кэширование
По возможности мы стараемся выполнять самые затратные вычисления только при изменениях, влияющих на их значения. Самый хороший пример этого — комнаты и лифты: когда игрок размещает лифт или строит стены, мы запускаем алгоритм заливки, помечающий тайлы, из которых доступны лифты и комнаты. Это ускоряет последующий поиск путей и может использоваться для того, чтобы показать игроку, какие из комнат пока недоступны.
Рассеянные и отложенные обновления
В некоторых случаях бывает логично выполнять определённые обновления только частично. Вот несколько примеров:
Некоторые обновления можно выполнять в каждом кадре только для части персонажей, например, скрипты поведения половины пациентов обновляются только в нечётных кадрах, а для второй половины — в чётных (хотя анимации и движение выполняются плавно).
В определённых состояниях, особенно когда персонажи находятся в режиме ожидания, но вызывают затратные части кода (например, сотрудники, проверяющие, что нужно заполнить и ищущие незанятое оборудование), операции выполняются только через определённые промежутки времени, допустим, раз в секунду.
Один из самых затратных, и в то же время распространённых вызовов — проверка того, какие анализы доступны для каждого пациента. При этом нужно оценить множество факторов — например, кто из персонала отделения в данный момент занят и какое оборудование зарезервировано. Кроме того, эта информация не является общей для всех пациентов, потому что на это влияют, например, назначенный им врач и их способность говорить. Необходимо проверять десятки доступных видов анализов, поэтому в одном кадре обновление выполняется только для некоторых, и продолжается в следующем.

Заключение
Оптимизация игры-менеджера со множеством взаимодействующих частей оказалась длительным процессом. Мне регулярно приходилось работать с профилировщиком Unity и устранять самые очевидные проблемы, это стало неотъемлемой частью процесса разработки.
Разумеется, всегда есть возможности для улучшения, но мы вполне довольны результатами. Игра справляется с поставленными нами задачами, а игроки постоянно создают для неё моды, значительно превышая исходное ограничение на количество персонажей.
Стоит также сказать о том, что даже по сравнению с некоторыми AAA-играми, над которыми я работал, в Project Hospital я встретился с самой сложной игровой логикой в своей практике, поэтому многие из проблем были специфичными именно для этого проекта. Тем не менее, я всё равно рекомендую оставлять в любом проекте достаточно времени для оптимизации в соответствии со сложностью игры.
Лучшие моды для Project Hospital
Project Hospital – экономический симулятор в режиме реального времени, в котором игрокам предстоит построить и управлять собственным госпиталем.
На сегодняшний день это в какой-то мере важно, поскольку мир окутан пандемией, а сектор здравоохранения загружен больше, чем когда-либо. Таким образом, Project Hospital предлагает интересный и даже ценный опыт.
Учитывая эти факторы, Project Hospital может похвастаться достаточно активным сообществом, и для игры было создано много пользовательского контента.
Мы собрали целый список различных модов для Project Hospital, благодаря которым ваш госпиталь заметно улучшит предоставляемые услуги!
- 1 Alphabet
- 2 Objects: Waiting Room
- 3 Objects: Doctor’s Office
- 4 More Levels
- 5 More Occupations
- 6 Patients Can Use Cafeteria
- 7 Bedside Examinations
- 8 Realistic Collapses and Disease Incidence
- 9 Oncology Department
- 10 Sexual Health Department
- 11 Department of Gynecology and Obstetrics
- 12 Ear, Nose & Throat Department
Alphabet

При старте новой игры в Project Hospital, первое, что вам нужно сделать, это построить здание больницы.
Моды могут сделать процесс намного интереснее, поскольку добавляют различные наборы предметов, позволяющие сделать клинику более выразительной.
Alphabet от пользователя под ником Vlad S – отличный мод, добавляющий в игру различные буквы, которые можно использовать для размещения указателей вокруг больницы.
Objects: Waiting Room

Все мы знаем, что комната ожидания – не самое веселое место на планете, поэтому находясь там многие пациенты хотят побыстрее скоротать время.
Дабы немного улучшить ситуацию, предлагаем украсить комнату ожидания, чтобы хоть как-то развеселить пациентов перед посещением доктора.
Пак Objects: Waiting Room добавляет в игру 14 декоративных объектов, включая журнальные столики, различные журналы и даже настенный телевизор.
Objects: Doctor’s Office

Не стоит забывать, что, помимо пациентов, в больнице есть и врачи, за которыми также требуется уход!
Хороший, красивый кабинет – одна из главных составляющих успешного врача. Пак Objects: Doctor’s Office позволяет создать невероятно удобные условия для ваших докторов.
Мод добавляет в игру большой деревянный стол, который отлично впишется в кабинет главного врача. Кроме того, создатель пообещал, что будет постепенно добавлять новые предметы, поэтому рекомендуем следить за обновлениями модификации.
More Levels

Во время игры посещаемость больницы неизбежно увеличивается. Если вы уже достигли точки, когда становится очень сложно идти в ногу с потребностями пациентов, мод More Levels – то, что нужно.
Он позволяет добавить в госпиталь 4 дополнительных этажа. Напомним, что базовая игра позволяет построить лишь 9.
More Occupations

Моды способны улучшить не только различные объекты, но и вносят разнообразие в жизнь пациентов. More Occupations добавляет в общей сложности 30 новых рабочих мест: теперь ваш госпиталь будут посещать механики, политики и даже военные!
Кроме того, для дополнительного реализма пациенты соответствуют определенным видам деятельности. Так, например, политики в основном представляют собой пожилых пациентов, а модели являются помоложе и стройнее.
Patients Can Use Cafeteria

Раз уж мы заговорили о реализме, то на самом деле существует множество модов, которые улучшают данный аспект.
Patients Can Use Cafeteria – отличный тому пример. После установки мода пациенты будут самостоятельно посещать кафетерий, если они проголодались.
Процесс полностью автоматизирован – они сами решают, когда голодны, отправляются в кафе и делают заказ.
Может показаться, что в этом нет ничего необычного, однако мод действительно делает клинику более «живой».
Bedside Examinations

Bedside Examinations – еще один мод, повышающий уровень реализма в Project Hospital. Он предлагает гораздо более реалистичный подход к диагностике пациента.
Так, доктора начнут проводить обычные медицинские осмотры у кровати пациента, прямо как в реальной жизни.
Кроме того, был переработан и процесс выбора обследования. Еще одним положительным моментом является то, что вам больше не придется нанимать огромное количество медсестер, чтобы проводить пациентов в смотровые кабинеты и обратно, поскольку многие осмотры можно проводить прямо в палатах.
Realistic Collapses and Disease Incidence

Следующий мод был разработан настоящим доктором, поэтому сомневаться в уровне реализма здесь не придется! Моддер под ником Butch посчитал, что в базовой версии игры пациенты слишком часто теряют сознание из-за сердечной недостаточности или обезвоживания.
Мод меняет данный аспект, благодаря чему игра становится более реалистичной. Кроме того, он снижает и частоту появления пациентов с более редкими заболеваниями, такими как холера, сибирская язва и бешенство.
Oncology Department

Поиграв в Project Hospital несколько десятков часов, вы почувствуете, будто уже закончили игру, поскольку будете способны вылечить практически любую болезнь.
Если вы хотите немного расширить геймплей, то следующие несколько модификаций уж точно помогут, поскольку добавляют в игру больше болезней, которые нужно лечить, а также все необходимые отделения и оборудование.
Мод Oncology Department добавляет в Project Hospital 18 форм рака, а также возможность создать собственное онкологическое отделение. Кроме того, модификация включает 74 новых типа диагностики, включая рак на нескольких стадиях и многое другое.
Sexual Health Department

Венерические заболевания также являются довольно распространенными, и мод Sexual Health Department позволяет поработать с ними в Project Hospital.
Мод добавляет в игру множество новых типов заболеваний, передаваемых половым путем. Сюда, конечно же, входит и весь необходимый персонал, комнаты, обследования и процедуры.
Department of Gynecology and Obstetrics

Гинекология и акушерство – очень важные отделения в любой больнице, поэтому вы должны быть уверены, что имеете всё необходимое для поддержки здоровья женщин на протяжении всей беременности.
Мод Department of Gynecology and Obstetrics представляет 66 новых диагнозов, 56 из которых являются клиническими, а 10 связаны с травмами.
Также включены различные симптомы и методы лечения, поэтому персонал вашей больницы наверняка будет готов. В качестве дополнительного бонуса здесь есть декоративные элементы.
Ear, Nose & Throat Department

Закрывает наш список мод Ear, Nose and Throat Department, добавляющий в игру ЛОР отделение. Модификация охватывает все, что связано с заболеваниями ушей, носа и горла.
В частности, Ear, Nose and Throat Department добавляет в общей сложности 43 новых состояния здоровья (38 из них – заболевания, а остальные 5 – различные травмы).
Включены также 6 новых объектов и 2 комнаты, которые помогут создать целое отделение.