лучший способ реализовать систему 2d платформерных комнат в unity

#unity3d #architecture #game-development

#unity3d #архитектура #разработка игр

Вопрос:

В настоящее время я создаю 2d платформерную игру с Unity. Я собираюсь создать игровой мир с комнатами (как в Hollow Knight и многих других играх metroidvania). Итак, моя первая идея состоит в том, чтобы каждая комната была отдельной сборкой с виртуальной камерой и выходами, связанными с другими комнатами на сцене. И иметь несколько сцен (что-то вроде того, что каждая сцена содержит набор «тематических» комнат).

У меня есть еще одна идея, но я не уверен, что она будет работать должным образом с точки зрения производительности. Идея проста — иметь единую игровую сцену и создавать экземпляры игровых комнат динамически и плавно. Таким образом, в игре будет загружена текущая комната и все смежные комнаты (возможно, с некоторой глубиной, т. Е. Все смежные комнаты с глубиной R), когда игрок меняет комнату — некоторые новые комнаты создаются, а другие уничтожаются. Это кажется хорошей идеей, потому что после создания динамической системы комнат вы можете просто сосредоточиться на создании и объединении комнат. Но я боюсь, что это может привести к некоторым проблемам с производительностью (т. Е. Игра зависает, когда игрок переходит из одной комнаты в другую, если поблизости есть достаточно большая комната). И я думаю, что может возникнуть гораздо больше неожиданных проблем.

Так что это вопрос открытого типа. Что вы думаете об этом «динамическом» подходе? Стоит ли пробовать? Если у вас есть опыт создания подобных игр, какой подход к дизайну вы использовали?

Ответ №1:

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