Отчет за февраль 2015г.

Всем привет!

Каждый месяц я пишу отчеты о том, чем я занимался и настало время расквитаться за ушедший февраль. Месяц был наполнен позитивными и положительными движениями: у меня появился новый SSD и рабочий компьютер вернулся в строй, нагрузка по работе немного ослабла, начался прогресс по плагинам и блогу, дружно приступили к формированию сообщества разработчиков игр и я начал перестраивать свои рабочие процессы. А теперь об этом и другом по-подробнее.

1.Фриланс.

Конечно же, первый пункт того, чем я занимался – это фриланс. Он занимает большую часть моего времени и мне очень нравится делать эту работу. Занимался двумя проектами из прошлого месяца и разрабатывал прототип нового. Показать картинки не могу, да и прототипы – они на кубиках, но разработка выглядит примерно так:

В коворкинге кипит работа

Continue reading “Отчет за февраль 2015г.”

Эффекты Shadow и Outline в Unity GUI.

Один из способов сделать текст с тенью – это отобразить текст два раза, второй раз с небольшим смещением и с цветом тени позади первого. Такое решение часто используют, если графическая библиотека не дает собственных механизмов отображения теней.

Неудобство такого подхода в том, что на каждый текст с эффектом тени нужно создавать два объекта и если текст динамический, то следить за тем, чтобы текст обновлялся в обоих объектах.

Простой текст и текст с тенью, созданной вручную

Unity GUI, доступная с версии 4.6, позволяет на текст наложить два эффекта: «Shadow» и «Outline». Как можно догадаться из названия – первый добавляет тень, второй – обводку.

Continue reading “Эффекты Shadow и Outline в Unity GUI.”

Shadow and Outline effects in Unity GUI.

One of the ways to create a text with shadow is displaying the text two times, the second time – with a small shift and shadow colour behind the first one. This solution is widely used, if the graphic library does not provide own means for display of shadows.

Such a solution is inconvenient though, because you need to create two objects for each text with shadow effect, and if the text is dynamic, then you have to ensure updating of text in both objects.

Simple text and text with shadow created manually

Unity GUI available from 4.6 version, allows to match two effects on the text: «Shadow» and «Outline». As you can guess from the names – the first effect adds a shadow and the second one – outline.

But these effects can be applied not only to the text (Text), but also to the image (Image). And since the text and the image are key blocks of all other UI elements, these effects can be applied to any other UI element as well. For example to the button:

Buttons with Shadow and Outline effects

If we look in the initial code of Shadow and Outline components, we will see that these components, in a fact, do the same thing: Shadow creates a copy of UI component’s geometry and shifts it some pixels aside; Outline creates four copies and shifts them in four opposite directions on x and y axes which provide the outline effect.

Let’s ponder what else we can achieve using these components: Simple outline for the selected objects. You do not need to draw two conditions for each image or handle the colour, you can simply add Outline effect and enable it for the selected object.


Extracting of image by enabling Outline component

Shadows of objects which “go beyond” further than usual shadows of UI elements.

For example, you can display some planes and their shadows on the ground, and imitate sun motion by changing one parameter. (Of course you won’t create game mechanism on GUI elements, but if you need only one simple scene, then why not).

Planes shadows and their shift over time  

Effect of double objects.

For example, you want to apply doubling effect on HUD when your hero is heavily hit or drinks much alcohol. This simply script, applied to all UI objects of the window will help you to achieve the necessary result.

Doubling effect in UI element

You are welcome to write your own ideas on using Shadow, Outline and other effects to the maximum extent in comments.

Отчет за январь 2015г

Всем привет!

Добро пожаловать в мой первый месячный отчет в этом году.
Отчет будет маленький: цели я сформулировал в середине января, вместо легкого фриланса пришлось много работать и в конце месяца у меня поломался SSD, что вынудило две недели пытаться работать на MacBook Air и было это не продуктивно.
Все перечисленные события привели к не большому прогрессу за январь.

1. Фриланс.

Почти все проекты, по которым я вел переговоры в декабре, в январе выстрелили одновременно. Фрилансерские будни. Пришлось от нескольких отказаться и взять на себя работу над тремя оставшимися. Они же и съели все мое время. Фрилансил много, активно, делал разное и интересное.

Разработка одного из проектов

В феврале планирую разгрузиться. Буду доделывать старые проекты, а новые постараюсь не брать.

Continue reading “Отчет за январь 2015г”

Цели на 2015 год

Цели на 2015 год

Год назад я начал публично озвучивать свои цели и писать месячные отчеты о результатах.

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

Декабрь я размышлял о будущем и пытался сформулировать цели на ближайший год и 10 лет. Цели на 10 лет оказались стандартными а-ля домик на берегу моря, семья, выход на пенсию в 45 лет, финансовая независимость. А вот цели на год оказались более конкретными и именно они должны помочь мне сделать шаг к десятилетним.

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

1. Заработок на жизнь фрилансом.
В 2015 году я так же, как и в двух предыдущих, буду зарабатывать на существование путем самостоятельного поиска проектов на фриланс-биржах, переговоров с заказчиками и исполнения их желаний, не выходящих за рамки разработки игр на “движке” Unity.

 

Цель: 

Continue reading “Цели на 2015 год”

Отчет за август 2014г

Всем привет!

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

Часть августа у меня продолжилась небольшими разъездами, зато вторую половину я провел в спокойствие и отдыхе от активных предыдущих месяцев, вернулся в коворкинг NETNATION.RU и мне удалось продуктивно поработать.

Мое рабочее место в коворкинге

Достижения августа:

Continue reading “Отчет за август 2014г”

Отчет за июнь и июль 2014г

Всем привет!

Каждый месяц я подвожу итоги о проделанной работе, но позапрошлый месяц я оставил без внимания, поэтому текущий отчет будет сдвоенным. Последние полтора месяца я был в разъездах, полторы недели июня в Москве и весь июль в Италии. Вот вернулся в Красноярск и собрался мыслями, чтобы написать в блог.

Не смотря на то, что я искал возможности работать везде, где только можно.

Минутки труда

Настрой на путешествия и не рабочая атмосфера сделали свое дело.

Однако, попробую поскрести по сусекам и найти результаты моей деятельности:

Continue reading “Отчет за июнь и июль 2014г”

Обертка для Invoke

API Unity часто подталкивает программистов к плохой практике хардкода имен функций. Один из таких скользких путей это использование функции Invoke у класса MonoBehaviour (Invoke, CancelInvoke, IsInvoking, InvokeRepeating).

Функции Invoke и ко. полезные, когда нам из одной функции нужно вызвать другую функцию с задержкой в несколько секунд. Например, после старта уровня, показать панельку с бонусами, но не сразу, а через две секунды:

public void Start()
{
    Invoke("ShowPanel", 2f);
}

private void ShowPanel()
{
    //show panel there
}

Continue reading “Обертка для Invoke”

Wrapper for Invoke

API Unity often pushes programmers to poor practice of hardcore function names. One of such slippery ways is the usage of Invoke function for MonoBehaviour class: Invoke, CancelInvokeIsInvokingInvokeRepeating.

Invoke function and co. are useful when we need to call another function from the initial one with a delay of a few seconds. For instance, after start of the level, to show the panel with bonuses, not immediately, but in two seconds:

public void Start()
{
    Invoke("ShowPanel", 2f);
}

private void ShowPanel()
{
    //show panel there
}

Or if it’s necessary to create a game object (bullet from a gun, a monster, running from behind the corner, etc.) regularly with a certain periodicity. For example, one second after the start of the level for the first time and every three seconds each following time:

public void Start()
{
    InvokeRepeating("SpawnMonster", 1f, 3f);
}

private void SpawnMonster()
{
    //Spawn monster there
}

And it’s convenient, but the hardcore functions names lead to problems, forcing to keep in mind unnecessary information and complicating support and refactoring of the code.

Let’s try to solve the issue taking advantages of the C# language and write the wrappers for Invoke functions and co.:

For a start we have to write a method which gets the name of the function out of the lambda expression, calling this function:

private string GetMethodName(Expression<Action> expr)
{
    return ((MethodCallExpression)expr.Body).Method.Name;
}

After that, write a wrapper for Invoke function, which takes on entry not the function name, but lambda, which calls the function, gets the name out of lambda and calls built-in Unity Invoke function:

protected void Invoke(Expression<Action> expr, float time)
{
    Invoke(GetMethodName(expr), time);
}

By analogy we wrap all other functions, we place the wrappers into the basic class and use. The foregoing examples will now look as follows:

public void Start()
{
    Invoke(() => ShowPanel(), 2f);
}

private void ShowPanel()
{
    //show panel there
}

and

public void Start()
{
    InvokeRepeating(() => SpawnMonster(), 1f, 3f);
}

private void SpawnMonster()
{
    //Spawn monster there
}

Now, any renaming of the function during refactoring will result in a compilation error, or all function calls will be automatically renamed by refactoring tools, if any are used.

You can find wrappings for Invoke here: UtilsExtensions.cs

Thank you for attention!

Отчет за май 2014г

Всем привет!

Каждый месяц я подвожу итоги и пишу небольшой отчет о проделанной работе. Настало время отчитаться за май.

Чем занимался:

1. Freelance.

Одна из игр, которой я занимался последние два месяца была доделана и опубликована на Google Play – Fat Piggy. Это клон Flappy Bird, но с множеством дополнительного функционала. На этой игре у меня сформировалась некая базовая архитектура небольших 2D игр на Unity, появились новые наработки и улучшились старые. Делать игру было приятно и интересно, да и заказчик хороший.

 

(Fat Piggy – геймплей)

Сейчас же занимаюсь несколькими новыми проектами (расскажу по мере завершения) и по чуть-чуть поддерживаю старые.

Continue reading “Отчет за май 2014г”