#unity3d
#unity-game-engine
Вопрос:
Не стесняйтесь закрыть этот вопрос, если он покажется вам слишком субъективным. Я понимаю, что это вполне может быть, поскольку он может быть в значительной степени ориентирован на лучшие практики, которые, если не являются отраслевым стандартом, могут быть субъективными.
Проблема и идея:
Я использую систему tilemap в Unity (2D), и она отлично работает, но у меня есть несколько опасений относительно моего конкретного использования. Что я хотел бы иметь, так это несколько «карт сражений», которые будут создаваться при переключении на сцену сражения. Моя текущая идея состоит в том, чтобы просто сделать каждый тип боевой карты сборным (сборным в сетке, поскольку карты листов — это просто слои), а затем создать экземпляр сетки при загрузке сцены.
Это лучшая практика или есть какой-то лучший способ? Есть ли разница между 10 картами и 200 картами?
Другие вещи, которые я рассмотрел:
Не было бы лучшей идеей создать одну огромную tilemap со всеми картами сражений, нарисованными на расстоянии друг от друга, и просто ограничить перемещение камеры только в пределах «текущей» карты сражений? Абсолютный максимальный размер, который я мог видеть на карте, составляет, скажем, максимум 30×20, хотя, вероятно, ближе к половине этого.
Ранее идея заключалась в использовании небольших изображений в пикселях для рендеринга карт. Это было до того, как я узнал о системе tilemap от Unity, которую, по общему признанию, я бы предпочел использовать, потому что ее намного проще визуализировать и меньше работать над разработкой.
Сценарий:
Для простоты предположим, что в игре есть 2 сцены: главное меню и сцена битвы. В принципе, идея состоит в том, чтобы попасть на сцену битвы и создать случайную карту битвы из того, что доступно. Персонаж (ы) размещается, и также размещаются любые дополнительные элементы, скажем, предметы или что у вас есть.
Является ли то, что я предложил выше, лучшей практикой? И должен ли я рассмотреть любые другие две системы, которые я также описал? Или есть что-то, о чем я не думаю, что было бы еще лучше?
Я не верю, что какой-либо из вышеперечисленных способов не сработает, мне просто любопытно, является ли какой-либо из них лучшим способом сделать это.
Ответ №1:
Ваше мнение о том, что все ваши карты сражений должны быть нанесены на одну tilemap и ограничение камеры только областью текущей карты, является немедленным предупреждением. По моему опыту работы с Unity, если я хочу, чтобы на сетке был нарисован большой уровень, мне придется разбить его на фрагменты (каждый фрагмент представляет собой отдельную tilemap) по соображениям производительности в редакторе и в игре, поэтому я бы не рекомендовал этого делать.
Если ваша цель — быстрое время загрузки, то создание экземпляра сборного файла, как вы предложили, не является плохой идеей, если соответствующая tilemap довольно мала (менее 10000 плиток), иначе вы бы почти наверняка заметили загрузку карты. Если вы пытаетесь загружать большие карты листов без видимых усилий, может помочь асинхронная загрузка tilemap до того, как произойдет фактическое переключение.
Я бы сохранил загруженными в сцену только текущую карту и следующую карту, чтобы обеспечить плавный переход и оптимальное использование ресурсов. Карты листов Unity не являются легкими.
Комментарии:
1. Я рассмотрю все это. Изначально я отверг идею большой Tilemap, но все равно решил включить ее сюда на всякий случай. Карты tile будут довольно маленькими, учитывая все обстоятельства, и выбраны случайным образом. Но мне нравится ваша идея всегда предварительно загружать следующую карту. Не уверен, как это будет работать в моих настройках, но это вопрос для другого раза (даже не уверен, что это необходимо).