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

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

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

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

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

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

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

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

1. Alpha.

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

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

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


Другой часто встречающийся сценарий – эффект исчезновения (FadeOut) и эффект появления (FadeIn) окна. Для реализации такого эффекта, без использования CanvasGroup, нам бы пришлось получать все UI-элементы, которые расположены на окне, и изменять параметр alpha у цвета для каждого найденного элемента (например, с помощью метода CrossFadeAlpha). Но и этого было бы не достаточно, так как некоторые UI-элементы на окне могут быть в полупрозрачном состоянии, и после того, как мы применили эффект исчезновения, путем изменения alpha до нуля, нам бы пришлось по завершению восстанавливать изначальный параметр alpha. Таким образом, необходимо было бы сохранять все параметры alpha для каждого UI-элемента, потом применять эффект и по завершению восстанавливать все параметры alpha для каждого UI-элемента. Много ненужной работы.

CanvasGroup упрощает процесс создания таких эффектов.

Эффекты Fade Out и Fade In

Для себя я написал два твина, которые реализуют эффекты исчезновения (FadeOutTween) и появления (FadeInTween) с помощью CanvasGroup и которые можно использовать “в одну строчку”:

public void OnGUI()
{
    if (GUILayout.Button("Fade Out/In"))
    {
         TweenSequence.Run(
            () => FadeOutTween.Run(Panel, Duration),
            () => FadeInTween.Run(Panel, Duration).SetDelay(0.25f));
    }
}

2. Interactable.

Позволяет сделать группу UI-элементов недоступными для взаимодействия (эквивалент enable/disable из множества других UI-фреймворков). Например, сделать невосприимчивыми к клику набор кнопок или все элементы на окне.

Делаем недоступной для ввода группу кнопок

3. Blocks Raycasts.

Блокирует все пользовательские действия над UI-элементами, которые реализованы через “Raycasts”. К примеру, отображаем поверх одного окна другое, и если вышележащее окно по размеру не перекрывает нижележащее, то возможность взаимодействовать с UI-элементами нижележащего окна останется. И для блокировки этой возможности мы можем использовать параметр “BlocksRaycast” на нижележащем окне.

Блокируем возможность взаимодействовать с UI-элементами нижележащего окна

Отличие от параметра “Interactable” в том, что “Interactable” переводит все UI-элементы в состояние “disabled”, и если UI-элемент имеет отдельный внешний вид для состояния “disabled”, то он меняет свой внешний вид на “disabled”. “BlockRaycasts” же просто блокирует весь пользовательский ввод без изменения внешнего вида.

4. Ignore Parent Groups.

Игнорируем все настройки CanvaGroup, которые находятся вверх по иерархии UI-элементов (своеобразная перегрузка-сброс всех настроек CanvasGroup).

Одна из кнопок использует настройки Ingore Parent Group

CanvasGroup полезный компонент, описание которого нужно включать во все базовые уроки uGUI, чтобы многие не повторяли мой путь написания костылей, а сразу совершили маленький шажок вперед к идеальному коду и миру.

Все примеры можно взять на github.

208
Leave a Reply

avatar
208 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
174 Comment authors
AmySenKimSencomo instalar bully scholarship edition ripperasKiaSenJaneSen Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
KiaSen
Guest
Audioease speakerphone 2 au rtas vst mas osx intel v2.0.2 library
Guest

Pretty! This has been an incredibly wonderful article. Many thanks for supplying this info.| а

hp wireless lan driver windows 7 64 bit
Guest

These are genuinely wonderful ideas in regarding blogging. You have touched some fastidious factors here. Any way keep up wrinting.| а

KimSen
Guest
скачать шаблон draganddrop 2020
Guest

I do consider all of the ideas you have presented for your post. They are really convincing and will definitely work. Nonetheless, the posts are very brief for starters. Could you please lengthen them a bit from subsequent time? Thanks for the post.| а

JaneSen
Guest
WimSen
Guest
Speedy Cash
Guest
tableboss 2.1.4.285 and necessary plugins
Guest

Usually I don’t learn article on blogs, however I wish to say that this write-up very pressured me to try and do it! Your writing style has been surprised me. Thank you, very great article.| а

cheap car ins
Guest
характеристика студента с места практики бухгалтером
Guest

I don’t even know how I ended up here, but I thought this post was great. I do not know who you are but certainly you are going to a famous blogger if you are not already 😉 Cheers!| а

WimSen
Guest
Fastest Payday Loan
Guest
английскими 6 класс упражнение 7 на 39 странице
Guest

Fantastic website. Lots of helpful information here. I’m sending it to several friends ans additionally sharing in delicious. And obviously, thank you for your sweat!| а

Online Payday Loan
Guest
EvaSen
Guest
Direct Lender Loans
Guest
A Payday Loan
Guest
documents to go v4.0.7 ipad
Guest

hi!,I like your writing so so much! share we be in contact extra about your article on AOL? I need an expert in this house to resolve my problem. May be that’s you! Taking a look forward to see you. | а

мто для рабочей программы по обществознанию по учебнику кравченко в 5 классе
Guest

Wow, awesome blog layout! How long have you ever been blogging for? you make blogging glance easy. The whole glance of your website is magnificent, as neatly as the content material! а

Best Online Loans
Guest
LisaSen
Guest
AmySen
Guest
донецк гостиницa донбaсс
Guest

Hi, i think that i saw you visited my web site so i came to “return the favor”.I am attempting to find things to improve my site!I suppose its ok to use some of your ideas!!| а

Online Loan
Guest
JaneSen
Guest
приказ о переводе на семейное обучение
Guest

Hi! I’m at work browsing your blog from my new apple iphone! Just wanted to say I love reading through your blog and look forward to all your posts! Carry on the excellent work!| а

Best Online Loans
Guest
sql backup professional v3 0 yag nemesyz commander
Guest

It’s hard to come by well-informed people in this particular topic, however, you sound like you know what you’re talking about! Thanks| а

Loans Online
Guest
low car insurance
Guest
Loans
Guest
scarface the world is yours 2020 pc free windows 7 patch
Guest

I think the admin of this website is truly working hard for his web site, because here every information is quality based material.| а

KiaSen
Guest
e insurance auto
Guest
KimSen
Guest
Online Payday Loans
Guest
Loans
Guest
EvaSen
Guest
Online Payday Loan
Guest
Payday Loans
Guest
WimSen
Guest
LisaSen
Guest
WimSen
Guest
схема подключения фуоза
Guest

I do not know if it’s just me or if everyone else encountering issues with your website. It seems like some of the text within your posts are running off the screen. Can someone else please provide feedback and let me know if this is happening to them too? This could be a problem with my browser because I’ve had this happen before. Thanks| а

AmySen
Guest
WimSen
Guest
best insurance rates
Guest
WimSen
Guest