Сверху или снизу?

Ох, давно я ничего не писал! Я пытался, честно. Я начинал писать обширную статью-сравнение Unity и UE4. Я начинал писать цикл статей про некоторые внутренности UI в Unity. К тем статьям я подходил основательно: составлял список тем, на которые потенциально мог бы что-то написать. Выбирал наиболее актуальную. Потом составлял примерный план. И систематически его разворачивал — ну все как положено! А в итоге все ушло в мусор. Как-то не вышел каменный цветочек.

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

Continue reading “Сверху или снизу?”

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

Когда я был совсем маленьким, я писал код на 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)”