среда, 17 апреля 2013 г.

Dynamic texts in ngui

The only problem I have to deal with 2D UI in NGUI plugin is text fonts. In details, there's a bunch of problems:

  • Dynamic font support (UPD: from NGUI 2.5 dynamic fonts are supported out-of-box)
  • Localization(arabic, hebrew languages, chinese etc).
  • Input texts
As I'm working on localization in deep, I found some useful things to solve problems described above:
  • for dynamic font, use https://github.com/imkira/unity-sysfont. It seems to be out-of-date (it hasn't been updated for 9 months), but it works and you need just to tweak it for youself. Maybe I'll finish it in holidays.
  • for chinese, japanese dynamic fonts works ok, use plugin above. If you intent to support arabic languages,  use http://u3d.as/content/abdullah-konash/unity-arabic-support/2B8. This asset allows you to write in rtl mode. Now I'm looking for hebrew plugin, or if I find someone who can read hebrew, I'll write it for myself. 
  • Situation about input text is troublesome. Changing uiinput component will cause problems with supporting and I don't like to do it. But there's no other way to cope with it.

суббота, 6 апреля 2013 г.

Кто виноват и что делать?

Не знаю почему, но когда появляется проблема, мы задаем два исконно русских вопроса именно в таком порядке:

  • кто виноват?
  • что делать?
А теперь маленький лайфхак - инвертируем порядок. То есть сначала думаем, что делать, как решить вопрос, а потом уже ищем виноватых, если в этом осталась какая-либо нужда.

P.S. Мысль вроде как и капитанская, но, если применять в жизни, получается очень эффективно, намного эффективней первого способа. 

пятница, 5 апреля 2013 г.

//TODO, //HACK, FIXME

В мире спортивного программирования всегда все просто: у тебя всегда валидные данные, обо всем позаботились организаторы. В промышленных масштабах это далеко не так: по закону Мерфи если что-то может пойти не так, так обязательно и будет. Поэтому ты тупо пишешь кучу проверок на случай ядерной войны. Или не пишешь. Оставляешь //TODO: check c надеждой на то, что когда будет скучно и не захочется ничего делать, будешь писать эти глупые проверки.

Сегодня запустили игру, она падает на уровне. Смотрим, где падает: null-reference exception. Смотрим код:
public void DoAction(Transform t) {
 //todo check before setting
 t.localPosition = foo;
 t.localRotation = bar;
 t.localScale = foobar;
}

Падало как раз при присвоении, потому что t - null. Как говорится, без комментариев. Хотя есть один: "//TODO:" существует не для того, что его оставляли и забывали, а для того, чтобы это фиксили и делали это как можно быстрее. И для //HACK, //FIXME инженерный закон "работает - не трогай" не катит - это просто бомба замедленного действия, который когда-нибудь рванет в совсем неожиданное время и неожиданном месте(ну, к примеру, во время презентации или, не дай Бог, релиза).