Как я могу убрать излишки созданного игроком мусора?

92

В моей последней игре, которую я делаю, вы можете нарезать 2D-объект произвольно, как показано на следующем рисунке:

введите описание изображения здесь

Вы можете непрерывно разрезать его на сотни или тысячи кусочков. Это не создает большого отставания, потому что они всегда находятся в состоянии физики сна, но есть проблема, когда вы заставляете их двигаться.

Я не совсем уверен, как справиться с этим, чтобы не разбить что-то на части. Я действительно не хочу удалять их через определенное время; Мне не нравится, как, если вы вернетесь к чему-то, что вы порезали через некоторое время, оно случайно исчезло.

Как я могу убрать излишки созданного игроком мусора?

Ducktor
источник
17
Из твоего вопроса не совсем понятно, чего ты на самом деле хочешь. Вы говорите, что хотите «очистить завалы», но в то же время говорите, что не хотите, чтобы щебень исчезал через некоторое время.
Филипп
10
Tiny & Big уничтожит мелкие кусочки. Я уверен, что большие части остались на уровне, но я не до конца помню. Вот пример: youtu.be/236ly0ApPqg?t=177
TyCobb
2
Вещи, которые находятся за пределами диапазона, могут быть удалены и заменены, когда вы вернетесь к нему.
Лорен Печтел
3
Просто мое маленькое мнение, но установите минимальный размер объекта, который будет выполняться действием обрезки. Если трудно выделить кусок, который вы режете, то вы не можете разрезать его. (Кроме того, хорошая динамика игры, у этого, безусловно, есть ноги!)
AJFaraday
12
Я хотел бы заявить, что не возьму на себя ответственность за создание механизма резки, поскольку это бесплатный ресурс, который я нашел на github . Используя пример, он дает вам представление о том, как использовать его для вырезания объектов. (игрок был закодирован мной, как и все остальное в игре.
Ducktor

Ответы:

71

Во-первых, эта игровая механика выглядит очень забавно, поэтому поздравляю с этим! Вот два простых решения, которые можно использовать независимо или вместе для решения этой конкретной проблемы:

Удалить очень маленькие кусочки

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

Лимитные сокращения игроков

Наличие неограниченного количества вырезов может потенциально сделать многие ваши головоломки действительно простыми, если вы можете просто нарезать каждый препятствующий объект в кучу кашу. Дайте игроку всего несколько ударов (или сделайте так, чтобы он медленно перезаряжался с течением времени), и вы, вероятно, обнаружите, что это делает ваши головоломки более сложными в дополнение к устранению боли при столкновении на тысяче фрагментов.

Чейз Сэндманн
источник
1
Думаю, я сделаю первый, так как я не планирую делать какие-либо головоломки.
Ducktor
36
Micheal Bay это когда маленькие кусочки тоже исчезают. Это не бревно, это опилки. Или взрывающиеся опилки. Почему нет?!
CorsiKa
26
@corsiKa Если вы добавите несколько огненных эффектов к режущему движению, вы можете сделать так, чтобы порезы оставляли следы ожогов на точках контакта с определенной шириной. Если объект настолько мал, что полностью «обожжен», он может загореться и сгореть за несколько мгновений.
Т. Сар - Восстановить Монику
155

Выясни свое узкое место

Несколько сотен движущихся объектов не должны быть проблемой. Тем не менее, несколько сотен сталкивающихся объектов могут быть. Это займет некоторое тестирование, но я считаю, что узким местом у вас является столкновение.

Кстати, о каких объектах идет речь? Какая платформа? Сто объектов для мобильной игры - это не то же самое, что сто для веб-игры или сто объектов для настольной игры.

Протестируйте ту же игру, но с отключенными столкновениями между вырезанными объектами, и посмотрите, не отстает ли она от одинакового количества объектов. Если это так, это означает, что огромное количество объектов является причиной проблем; в противном случае столкновения являются проблемой.

Это сообщит ваше решение о том, что вы будете делать для повышения производительности. Не все идеи, приведенные ниже, будут применимы, и вам все равно потребуется тестирование.


Я не буду говорить об оптимизации для большого количества объектов вдали от игрока, так как, похоже, проблема возникает при взаимодействии с объектами.

есть проблема, когда вы заставляете их двигаться.

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

Я просто скажу, что если объекты, находящиеся далеко от игрока, представляют собой проблему, вы можете начать с меньших уровней или изучить разделение игры на куски, которые можно загружать и выгружать в зависимости от того, куда идет игрок.


За границами

Я считаю, что когда дело доходит до уборки мусора, первое, что нужно сделать, это удалить объекты, которые находятся за пределами. Например, кусок, который упал в яму. Если у игрока нет возможности попасть туда, чтобы увидеть его, нет смысла держать его рядом.

Я вернусь к этому.


Сделайте это более реалистичным (часть 1)

Когда вы режете дерево с помощью пилы, топора или подобного инструмента, будут потеряны материалы (опилки, стружка и т. Д.). Даже если вы порежете лазером, лазер сожжет немного дерева. Кроме того, для вещи, которая не является деревом, обычно будет деформация вокруг разреза, разрушения и т. Д.

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

Это означает, что вы не сможете вырезать что-либо, что меньше этой толщины, фактически попытка сделать это удалит это из игры. Это хорошо! Это означает, что существует верхняя граница количества обломков, и существует механически надежный способ убрать его в игре.


Поменять передачи для мелких предметов

Это будет работать лучше, если столкновения являются проблемой.

Если объект слишком мал, детали его различных углов менее актуальны. Вы можете перейти на менее точную механику столкновения. Например, вы можете использовать круговые коллайдеры.

Вы можете обрабатывать даже более мелкие объекты без столкновения между собой; учитывайте только столкновение между ними и объектами агента (такими как аватар игрока или персонажи, контролируемые ИИ).

Наконец, очень маленькие объекты могут просто превратиться в пыль (эффекты частиц).


Сделайте это более реалистичным (часть 2)

Это будет работать лучше, если столкновения являются проблемой.

Материал деформируется и ломается под давлением. Если у вас получатся длинные объекты очень малой толщины, разбейте их на более мелкие объекты, чтобы они могли воспользоваться преимуществами решения, описанного выше.

Мы можем притвориться, что у него слишком малая толщина, чтобы он крошился и ломался при ударе.


Объединить объекты

Это будет работать лучше, если проблема заключается в количестве объектов.

Обычная уловка, которую используют многие игры, чтобы справиться с большим количеством дропов, которые могут снизить производительность, - это связывать дропы вместе.

Вы можете попробовать что-то подобное для небольших объектов, которые находятся рядом друг с другом. Пусть они станут единым объектом. Тем не менее, я не хочу склеивать кусочки. Я имею в виду создать единый объект для управления своей физикой; вы все еще можете представлять отдельные части, составляющие объект, возможно, используя методы, сродни эффектам частиц.


Сделайте это более реалистичным (часть 3)

Вы слышали о ветре? В реальном мире ветер.

Используйте ветер, чтобы оттолкнуть маленькие предметы.

Я знаю, что это может звучать противоинтуитивно, потому что это означает, что маленькие объекты не могут отдыхать, по крайней мере, не сразу. Прочитайте ниже, прежде чем вы сделаете свое мнение.

Вы можете использовать ветер, чтобы оттолкнуть маленький объект до того, как он начнет накапливаться. Который будет работать лучше, если вы используете оптимизацию для небольших объектов (например, их объединение или устранение столкновений между ними).

Кроме того, если вы можете использовать ветер, чтобы выталкивать предметы в ямы или иным образом выходить за пределы, вы можете использовать в качестве предлога для удаления предметов. Я сказал вам, что собираюсь вернуться к этому. Даже если вы этого не сделаете, это может послужить оправданием для удаления мелких предметов, которые находятся слишком далеко от игрока, просто притворитесь, что ветер избавился от них, пока игрок не смотрел.

Вы можете удалить некоторые объекты, пока игрок не смотрит, у вас есть мое благословение.

В дополнение к этому у вас теперь есть предлог для добавления ветра, который вы можете добавить в качестве части других механик или препятствий в игре. Вы могли бы даже добавить в повествование дух ветра, который пытается сохранить вещи в чистоте, если вы так склонны.

Примечание : вам не обязательно запускать ветер, когда требуется очистить щебень (хотя это сработает), возможно, ветер будет происходить через случайные промежутки времени.


Бобры!

Приходит какой-то надоедливый бобер и крадет твой лес!

Теперь у вас есть тип врага!

Кроме того, конечно, они убирают древесину, пока вы не искали. Вы можете даже спроектировать его так, чтобы вы вернулись и увидели, как один бобер убегает с куском дерева, где раньше была куча. Это запомнится на мгновение, объяснит, почему дерево исчезло, и решит сразу несколько проблем с производительностью, с которыми вы столкнетесь.


Это все компромиссы

Существуют ограничения платформы или инструментов, которые вы выбрали, даже время и бюджет, на которые вы должны разработать игру, являются ограничением. Вы не можете сделать идеальную имитацию реальности, тем не менее . Никто не может .

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

Пусть творчество приходит из этих ограничений.

Хотя вы также можете сделать свою игру более реалистичной , выбирая те части реальности, которые удобны для вашего развития. Учтите, что иногда удаление объектов, которые находятся вне игрока, является частью стоимости создания забавной игры.

Theraot
источник
36
Этот пост является окончательным ответом на проблему переполнения щебня. Вы предоставили исчерпывающее резюме методов, в то же время четко продемонстрировав необходимость творческого подхода и выбора решений, которые подходят для ваших обстоятельств, а также продемонстрировали, как механика и повествование могут сочетаться друг с другом. Я просто хотел сказать, что мне сложно выразить, как я впечатлен.
Драгомок
12
Попытка вырезать объект, меньший ширины луча, не обязательно приводит к тому, что объект полностью исчезает, но вместо этого может привести к появлению одного объекта меньшего размера. Важно то, что количество объектов может быть увеличено только в том случае, если вырезанный объект превышает ширину луча.
суперкат
1

Мир дискретен. Вы не можете визуализировать объект меньше пикселя, поэтому не позволяйте таким объектам существовать. (Это похоже на некоторые моменты реализма, сделанные Тераотом .)

В самом деле, вы можете получить это бесплатно: игрок указывает свою линию разреза как по существу дискретную линию на экране. Эффект обрезки состоит в том, чтобы разделить каждый объект на подобъекты, состоящие, соответственно, из пикселей на или ниже этой линии и пикселей строго над ней. Однопиксельный объект не может быть как выше, так и ниже линии, поэтому он не может быть вырезан этим алгоритмом.

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

Или просто не беспокойся об этом. Если игрок готов тратить много времени на разрезание предметов в пыль, он, очевидно, не спешит, поэтому он может справиться с задержкой, которую он вызвал. ;-)

Дэвид Ричерби
источник