Примеры использования CanvasGroup в Unity.

Сегодня я хочу рассказать об одной компоненте из библиотеки uGUI, незнание которой породило мной ряд “костылей” в нескольких проектах, что привело к большему количеству кода, работы, и как следствие, ошибок.

Компонента – CanvasGroup.

Если знать про её существование заранее, то исчерпывающую информацию можно получить из документации и спокойно применять полученные знания.

Я же коснусь всех настроек “CanvasGroup” чуть подробнее и с примерами, дабы в памяти остался визуальный слепок и легко извлекся в последствии, когда понадобится.

Основное предназначение “CanvasGroup” – это управление группой UI-элементов, которые находятся ниже по иерархии (“внутри” CanvasGroup). Так же, эти настройки распространяются на сам “GameObject”, содержащий компоненту “CanvasGroup”.
Например, мы хотим управлять сразу всеми элементами в окне, группой кнопок или группой картинок.

Настройки “CanvasGroup”

Как видно из картинки выше, “CanvasGroup” содержит всего четыре настройки, о назначении которых можно легко догадаться из названий. Однако, пройдемся подробнее:

1. Alpha.

Управление прозрачностью группы UI-элементов. Изменяет прозрачность как корневого UI-элемента, на котором находится компонента CanvasGroup, так и всех дочерних UI-элементов.

Один из сценариев использования – сделать группу объектов полупрозрачными, не изменяя цвет каждого объекта:

Меняем прозрачность группы UI-элементов

Continue reading “Примеры использования CanvasGroup в Unity.”

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

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

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

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

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

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

Обертка для 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”

Настройка SortingLayer для любого объекта в Unity 2D.

Обновление: 31 декабря, 2018 года

Содержание статьи устарело. У Unity, с момента написания статьи, вышло огромное количество обновлений. И теперь можно настраивать SortingLayer во многих местах, включая системы частиц, например.


В Unity3D версии 4.3 появился долгожданный 2D фреймворк, принесший с собой механизм работы со спрайтами, за отображение которых отвечает “Sprite Renderer”. Как работать со спрайтами есть множество туториалов и видео в сети, я же хочу остановиться на двух важных настройках, которые есть в “Sprite Renderer”, и проблеме использования 3D объектов Unity в 2D играх.

Важные настройки это: “Sorting Layer” и “Order in Layer”:

Зачем нужны эти два параметра? Если кратко, в 2D фреймворке не используется z-координата, она никак не влияет на порядок отображения объектов в сцене. За порядок отображения отвечает другой механизм – механизм слоев. Можно управлять порядком отображения спрайтов в сцене путем назначения спрайту определенного слоя (“Sorting Layer”), а так же, при необходимости, порядок отображения внутри конкретного слоя можно настраивать с помощью параметра “Order in Layer”.

Continue reading “Настройка SortingLayer для любого объекта в Unity 2D.”

Методы организации взаимодействия между скриптами в Unity3D.

Вступление.

Даже средний Unity3D проект очень быстро наполняется большим количеством разнообразных скриптов и возникает вопрос взаимодействия этих скриптов друг с другом.

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

Подход 1. Назначение через редактор Unity3D.

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

Назовем оба скрипта менеджерами: ScoresManager и HUDManager.
Каким же образом менеджеру, отвечающему за меню экрана можно получить текущее количество очков от менеджера, отвечающего за начисление очков?

Предполагается, что в иерархии объектов(Hierarchy) сцены существуют два объекта, на один из которых назначен скрипт ScoresManager, а на другой скрипт HUDManager.

Один из подходов, содержит следующий принцип:

В скрипте UIManager определяем переменную типа ScoresManager:

public class HUDManager : MonoBehaviour
{
	public ScoresManager ScoresManager;
}

Но переменную ScoresManager необходимо еще инициализировать экземпляром класса. Для этого выберем в иерархии объектов объект, на который назначен скрипт HUDManager и в настройках объекта увидим переменную ScoresManager со значением None.

Continue reading “Методы организации взаимодействия между скриптами в Unity3D.”