Я поделюсь своим методом применения эффекта плавного освещения к 2D-сетке. ответ от ClassicThunder предоставляет хорошую ссылку для теней.
Прежде всего, нам нужно будет рассчитать значения освещения каждой плитки, которые будут размыты позже.Позвольте мне проиллюстрировать, как это работает, прежде чем я войду в код.
В основном мы делаем цикл по всем плиткам, начиная сверху, если плитка пуста,установите переменную CurrentLight
на максимальную яркость, если мы найдем сплошную плитку, установите ее как переменную CurrentLight
и вычтите величину "поглощения" из CurrentLight
.Таким образом, на нашей следующей сплошной плитке, когда мы установим плитку на значение CurrentLight
, она будет немного меньше.Этот процесс повторяется до тех пор, пока массив не будет повторен.
Теперь будет хороший эффект освещения сверху вниз, но он не так уж велик.Мы должны повторить этот процесс еще 3 раза, снизу вверх, слева направо и справа налево.И это может повторяться несколько раз для лучшего качества.
По сути, запуск этого кода на каждой плитке в цикле
if (tile.Light > CurrentLight) //If this tile is brighter than the last, set the current light to the tiles light
CurrentLightR = tile.Light;
else if (CurrentLight != 0f) //If it is less, and isnt dark, then set the tile to the current light
tile.Light = CurLightR;
if (tile.Light == CurLightR) //If it is the same, subtract absorb values
CurrentLight -= tile.Absorb;
И вот, хорошее освещение плиток.Однако, если вам нужен менее «пиксельный» вид, вы можете проверить мой вопрос по gamedev для этого.