Unity2D высокая трава


8

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

Я хочу реализовать «высокие травы», где часть персонажа будет закрыта.

Наглядный пример:

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

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


6
Знаете, иногда вам нужно работать с большим количеством игровых объектов.

Одним из способов взлома, чтобы избежать большего количества игровых объектов, было бы заменить спрайт игрока собственной версией спрайта «isInGrass» (очень грубый пример здесь ), пока он находится в траве, и просто нарисовать его сверху. С хорошим искусством и небольшим количеством прозрачности внизу (чтобы он гармонировал с фактической травой) это могло бы выглядеть достаточно хорошо.
Кристиан

Я думал об этом подходе, но, помимо всей работы, которая потребовала бы (нам понадобилось бы по два раза анимации для каждого актера, по крайней мере), переход от внешней травы к внутренней стороне от бокового сценария (в примере изображения: Верхняя строка (третий столбец), когда половина тела находится внутри, а другая половина - снаружи, результат будет довольно грязным.
Лев

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

1
Это звучит так же, как я искал! Я должен сделать некоторые исследования и поэкспериментировать с этим. Если мне удастся заставить что-то работать, я опубликую это как ответ.
Лев

Ответы:


1

Я согласен с @Christian (хотя я бы не назвал это хаком). Определите условие, когда объект должен выглядеть по-другому, а затем просто нарисуйте его по-другому. Каждая вещь в игре не должна быть «моделью» того, как она работает в «природе». Эту ошибку я совершал много раз, и поэтому она стала для меня чем-то вроде мантры. Спросите себя: что бы вы получили, если бы куст «окутывал» игрока «реалистично», а не просто рисовал его так, как он должен выглядеть? Я поставил это в кавычки, потому что, пытаясь представить, как это будет выглядеть, я думаю, что многослойный подход окклюзии может на самом деле выглядеть хуже.

Если вы обеспокоены подходом @ Christian к управлению «потенциально неограниченным» списком мелочей, которые вы должны проверять в каждом кадре, это еще одна ошибка, которую я совершал много раз. Я бы порекомендовал вам «просто пойти с этим» сейчас и периодически проверять, сколько времени на самом деле получил список - и действительно ли это стало проблемой . Произойдет одно из двух. Либо это не стало проблемой, в таком случае - почему вы пытаетесь ее решить? Или это так, и вам нужно разработать (минимальное) решение для его решения. Не пытайтесь решить это, моделируя это.


0

Я наконец нашел удовлетворительное решение! @Thebluefish комментарий указал мне правильное направление с масками.

Идея состоит в том, чтобы использовать шейдер, который рисует персонажа в два прохода:

  • На первом проходе персонаж отображается нормально, НО полностью за кустами.
  • Во втором проходе я рисую это снова, используя маску, которая рисует только верхнюю часть персонажа поверх кустов.

Это делается даже тогда, когда Chatacter не находится внутри кустов. Таким образом, мне не нужно обнаруживать столкновения с кустами, а также это делает переход внутри куста плавным в предельных случаях, таких как этот:

Половина персонажа, находящегося за пределами куста, отображается в первом проходе. Другая половина будет полностью закрыта кустом.

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


-1

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


Я считаю, что этот ответ уже был предложен. У вас есть дополнительные детали, чтобы добавить к вашему ответу?
MichaelHouse
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.