Выясни свое узкое место
Несколько сотен движущихся объектов не должны быть проблемой. Тем не менее, несколько сотен сталкивающихся объектов могут быть. Это займет некоторое тестирование, но я считаю, что узким местом у вас является столкновение.
Кстати, о каких объектах идет речь? Какая платформа? Сто объектов для мобильной игры - это не то же самое, что сто для веб-игры или сто объектов для настольной игры.
Протестируйте ту же игру, но с отключенными столкновениями между вырезанными объектами, и посмотрите, не отстает ли она от одинакового количества объектов. Если это так, это означает, что огромное количество объектов является причиной проблем; в противном случае столкновения являются проблемой.
Это сообщит ваше решение о том, что вы будете делать для повышения производительности. Не все идеи, приведенные ниже, будут применимы, и вам все равно потребуется тестирование.
Я не буду говорить об оптимизации для большого количества объектов вдали от игрока, так как, похоже, проблема возникает при взаимодействии с объектами.
есть проблема, когда вы заставляете их двигаться.
Если проблема возникает при взаимодействии с объектами, неясно, как ее устранит удаление невидимых объектов ... пока, я предполагаю, что это может помочь.
Я просто скажу, что если объекты, находящиеся далеко от игрока, представляют собой проблему, вы можете начать с меньших уровней или изучить разделение игры на куски, которые можно загружать и выгружать в зависимости от того, куда идет игрок.
За границами
Я считаю, что когда дело доходит до уборки мусора, первое, что нужно сделать, это удалить объекты, которые находятся за пределами. Например, кусок, который упал в яму. Если у игрока нет возможности попасть туда, чтобы увидеть его, нет смысла держать его рядом.
Я вернусь к этому.
Сделайте это более реалистичным (часть 1)
Когда вы режете дерево с помощью пилы, топора или подобного инструмента, будут потеряны материалы (опилки, стружка и т. Д.). Даже если вы порежете лазером, лазер сожжет немного дерева. Кроме того, для вещи, которая не является деревом, обычно будет деформация вокруг разреза, разрушения и т. Д.
То, что я говорю, - то, что сокращение не идеально, и некоторый материал будет потерян. Вы можете смоделировать это в своей игре. Эта волшебная режущая красная штуковина имеет толщину. Уберите эту толщину с объектов (добавьте эффекты частиц, если вы чувствуете себя слишком виноватым).
Это означает, что вы не сможете вырезать что-либо, что меньше этой толщины, фактически попытка сделать это удалит это из игры. Это хорошо! Это означает, что существует верхняя граница количества обломков, и существует механически надежный способ убрать его в игре.
Поменять передачи для мелких предметов
Это будет работать лучше, если столкновения являются проблемой.
Если объект слишком мал, детали его различных углов менее актуальны. Вы можете перейти на менее точную механику столкновения. Например, вы можете использовать круговые коллайдеры.
Вы можете обрабатывать даже более мелкие объекты без столкновения между собой; учитывайте только столкновение между ними и объектами агента (такими как аватар игрока или персонажи, контролируемые ИИ).
Наконец, очень маленькие объекты могут просто превратиться в пыль (эффекты частиц).
Сделайте это более реалистичным (часть 2)
Это будет работать лучше, если столкновения являются проблемой.
Материал деформируется и ломается под давлением. Если у вас получатся длинные объекты очень малой толщины, разбейте их на более мелкие объекты, чтобы они могли воспользоваться преимуществами решения, описанного выше.
Мы можем притвориться, что у него слишком малая толщина, чтобы он крошился и ломался при ударе.
Объединить объекты
Это будет работать лучше, если проблема заключается в количестве объектов.
Обычная уловка, которую используют многие игры, чтобы справиться с большим количеством дропов, которые могут снизить производительность, - это связывать дропы вместе.
Вы можете попробовать что-то подобное для небольших объектов, которые находятся рядом друг с другом. Пусть они станут единым объектом. Тем не менее, я не хочу склеивать кусочки. Я имею в виду создать единый объект для управления своей физикой; вы все еще можете представлять отдельные части, составляющие объект, возможно, используя методы, сродни эффектам частиц.
Сделайте это более реалистичным (часть 3)
Вы слышали о ветре? В реальном мире ветер.
Используйте ветер, чтобы оттолкнуть маленькие предметы.
Я знаю, что это может звучать противоинтуитивно, потому что это означает, что маленькие объекты не могут отдыхать, по крайней мере, не сразу. Прочитайте ниже, прежде чем вы сделаете свое мнение.
Вы можете использовать ветер, чтобы оттолкнуть маленький объект до того, как он начнет накапливаться. Который будет работать лучше, если вы используете оптимизацию для небольших объектов (например, их объединение или устранение столкновений между ними).
Кроме того, если вы можете использовать ветер, чтобы выталкивать предметы в ямы или иным образом выходить за пределы, вы можете использовать в качестве предлога для удаления предметов. Я сказал вам, что собираюсь вернуться к этому. Даже если вы этого не сделаете, это может послужить оправданием для удаления мелких предметов, которые находятся слишком далеко от игрока, просто притворитесь, что ветер избавился от них, пока игрок не смотрел.
Вы можете удалить некоторые объекты, пока игрок не смотрит, у вас есть мое благословение.
В дополнение к этому у вас теперь есть предлог для добавления ветра, который вы можете добавить в качестве части других механик или препятствий в игре. Вы могли бы даже добавить в повествование дух ветра, который пытается сохранить вещи в чистоте, если вы так склонны.
Примечание : вам не обязательно запускать ветер, когда требуется очистить щебень (хотя это сработает), возможно, ветер будет происходить через случайные промежутки времени.
Бобры!
Приходит какой-то надоедливый бобер и крадет твой лес!
Теперь у вас есть тип врага!
Кроме того, конечно, они убирают древесину, пока вы не искали. Вы можете даже спроектировать его так, чтобы вы вернулись и увидели, как один бобер убегает с куском дерева, где раньше была куча. Это запомнится на мгновение, объяснит, почему дерево исчезло, и решит сразу несколько проблем с производительностью, с которыми вы столкнетесь.
Это все компромиссы
Существуют ограничения платформы или инструментов, которые вы выбрали, даже время и бюджет, на которые вы должны разработать игру, являются ограничением. Вы не можете сделать идеальную имитацию реальности, тем не менее . Никто не может .
Каждый разработчик работает в рамках ограничений, наложенных на его целевую платформу и инструменты, которые у него были в то время, и лучшие игры должны были пойти на компромисс, чтобы сделать игру увлекательной и увлекательной ... даже если это означает меньший реализм, на самом деле, часто они веселые и увлекательные, потому что они нереалистичны.
Пусть творчество приходит из этих ограничений.
Хотя вы также можете сделать свою игру более реалистичной , выбирая те части реальности, которые удобны для вашего развития. Учтите, что иногда удаление объектов, которые находятся вне игрока, является частью стоимости создания забавной игры.