Про форматирование

Когда я был совсем маленьким, я писал код на BASIC. Я бормотал себе под нос заклинания “иф икс больше нуля тхен дыщ-дыщ-дыщ”. Дыщ-дыщ-дыщ — это три пробела. Да, я вбивал их вручную. Да, видимо тогда мне еще не довелось узнать о том, что есть способ проще. И что then читается немного не так. Но зато уже тогда я знал, что содержимое условий и циклов нужно сдвигать! Так делают профи.

С тех пор мой стиль оформления кода успел претерпеть некоторые изменения. Об истории этих самых изменений я и хочу сегодня рассказать.

Continue reading “Про форматирование”

Делаем прототип клиент-серверной стратегии на Unity

Недавно я делал тестовое задание в одну некогда известную в нашей стране игровую компанию. Честно говоря, я по-началу был несколько ошарашен дерзостью — ни много ни мало, нужно было всего лишь сделать “прототип клиент-серверной стратегии”. Тянет на несколько дней плотной работы! Но я все же решил ввязаться в это. Ну, мне ведь не слабо, да?

Continue reading “Делаем прототип клиент-серверной стратегии на Unity”

Не обижайте чужие технологии!

Суровый C++-ник скептически относится к пробело-чувствительности Python и считает ее бездонным источником ошибок? А как вам мнение, что ФП — хайповая тема и на самом деле все то же самое можно отлично сделать на ООП? Знакомо такое отношение? Надеюсь, что нет. Впрочем, скорее всего за свою карьеру вам доводилось сталкиваться с подобным. Об этом и хочу поговорить.

Continue reading “Не обижайте чужие технологии!”

Волшебство Clojure

Когда-то в детстве мне посчастливилось увидеть в одной детской энциклопедии картинку. Справа был небольшой фрагмент кода на бейсике. На таком старом классическом бейсике, с нумерацией строк через десять, вроде 640, 650, 660. А слева был монитор, на котором отображалась монохромная картинка то ли взлетной полосы, то ли самолета, то ли самолета, взлетающего со взлетной полосы… и подписано, что, мол, программка справа рисует картинку слева.

Continue reading “Волшебство Clojure”

Про инкрементальную архитектуру

Возможно, более употребимым термином является эволюционная архитектура (evolutionary architecture / design), но я впервые познакомился с этим понятием именно под таким названием, так что буду использовать его1. В этой статье я собираюсь рассказать о своем понимании этого предмета и еще немного о том, как я к этому пониманию шел.

Continue reading “Про инкрементальную архитектуру”

Поддержка TextMesh Pro в Soft Mask

TextMesh Pro — очень популярный ассет для рендеринга SDF-шрифтов. Не так давно он стал доступен бесплатно, что для меня послужило поводом наконец-то сделать штатную интеграцию этого пакета с моим Soft Mask.

Continue reading “Поддержка TextMesh Pro в Soft Mask”

Как устроен Soft Mask

Кто работал с UI в Unity, мог столкнутся с одной особенностью стандартного компонента Mask: он работает через stencil и потому не поддерживает прозрачность. Пиксель либо полностью виден, либо полностью маскирован. В некоторых случаях это не проблема, поскольку мы можем “прикрыть” маскированный элемент какой-нибудь рамкой:

Обратите внимание на пикселированные края картинки слева. Но иногда нам нужен плавный переход:

Добиться такого эффекта в Unity без сторонних компонентов или написания своих шейдеров невозможно. Именно этот недостаток стандартной маски и призван устранить мой ассет — Soft Mask.

Continue reading “Как устроен Soft Mask”

Реализация тумана войны (3/3)

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

Continue reading “Реализация тумана войны (3/3)”

Реализация тумана войны (2/3)

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

Continue reading “Реализация тумана войны (2/3)”

Реализация тумана войны (1/3)

Однажды для одного проекта, над которым я работал, понадобилось реализовать туман войны. Казалось бы, это такая популярная фича, что для нее в Asset Store непременно найдется с десяток решений. На деле их нашлось всего несколько, а доверие вызвало лишь одно из них. Основная его фича – расчет полей видимостей с учетом перекрытий, вроде как в Heroes of the Storm или других MOBA’х. Нам же нужен был всего лишь старый добрый туман войны, как в старых RTS’ках, когда карта раскрывается кружочками вокруг юнитов. Это была одна из причин, почему я в итоге отказался от использования этого ассета и решил делать свою реализацию. О том, как я это делал, собственно, и хочу рассказать.

Continue reading “Реализация тумана войны (1/3)”