Изследване на потребителския интерфейс в Unity 4

Спомням си, че тук имаше хора, които писаха за Unity3D, така че ето бележка за вас :)

Въз основа на произволно проучване основният обект, без който изграждането на потребителски интерфейс е невъзможно, е Canvas. Той отговаря за изчертаването на интерфейсни елементи и препращането на събития към тях. Canvas също има 3 опции за изобразяване на потребителския интерфейс: ScreenSpace - Overlay, ScreenSpace - Camera и WorldSpace.

ScreenSpace - Overlay и ScreenSpace - Camera Както можете да видите от името на режимите, те работят с екранни координати. Това ви позволява да сглобите интерфейс PixelPerfect, но ако имате нужда интерфейсът да изглежда еднакво при всички разделителни способности или искате да създадете 3D потребителски интерфейс - тези опции не са подходящи за вас.

WordlSpace Този режим изобразява елементите в световното пространство, така че ако нямате камера, в която да ги поставите, може да не ги видите. Този режим ме заинтересува, защото ви позволява да създадете потребителски интерфейс, който ще изглежда по същия начин, независимо от разделителната способност на екрана. Единственият малък проблем е, че Canvas, за разлика от предишните режими, не реагира на промените в аспекта на екрана. Но този проблем се решава с прост скрипт, който контролира ширината/височината на платното при стартиране.

Няма да описвам отделни елементи, така или иначе можете да се запознаете с тях по метода на математическото мушкане. Но системата за съобщения си струва да се разгледа по-отблизо.

Първо: За да работи потребителският ви интерфейс, трябва да имате EventSystem във вашата сцена. EventSystem е компонент, който обработва потребителски събития и ги предава на потребителския интерфейс. Обработката на събития се извършва в компонентите на InputModule. Попаднах на 2 (StandaloneInputModule за компютър, конзоли и уеб и TouchInputModule за мобилни телефони и таблети). И съдейки по настройките им, темогат да бъдат поне частично взаимозаменяеми. InputModule улавя събитията на потребителя и ги предава на EventSystem, който вече насочва всичко към потребителския интерфейс. Но как се определя, че активният елемент е щракнат? GraphicRaycaster е отговорен за това.

GraphicRaycaster Този компонент се намира на Canvas и в отговор на щракване с мишката/докосване определя към кой обект да се изпрати събитие. Общо в новия потребителски интерфейс има 3 вида raycaster: raycaster за 2D физика, raycaster за 3D физика и raycaster за графични елементи. По подразбиране последният се добавя към обекта на играта. Този raycaster има един огромен недостатък: за да може даден обект да получи събитие, той трябва да има графичен компонент. С други думи, ако искате да създадете прозрачна област на екрана, която ще задейства действие при щракване, ще трябва да създадете компонент с графики и да го направите напълно прозрачен. Според мен това е много неудобно, добре е, че има възможност тази система да се разшири с въвеждането на нови raycasters.

Малко за кода. Потребителският интерфейс може да бъде разделен на 3 части: системата за генериране на събития (UnityEngine.Events) - иновация в Unity 4.6, засяга не само потребителския интерфейс, но и физиката и системите за изобразяване, системата за улавяне на събития (UnityEngine.EventSystems) и самата логика на потребителския интерфейс (UnityEngine.UI). Освен това първата система е част от основната библиотека на двигателя, а останалите 2 са част от UI библиотеката.

Събития Това пространство от имена съдържа класове, които описват основната структура на събитията. Има 2 вида класове: UnityAction (източник на събитие) и UnityEvent (слушател на събития, възможно е да слушате множество събития). Те могат да приемат до 4 параметъра от следните типове: EventDefined, Void, Object, Int, Float, String, Bool (въз основа на описанието в EnumPresustentListenerMode).

EventSystems Това пространство от имена съдържа класове и интерфейси, които осигуряват обработка на събития за UI елементи, като всяко събитие има свой собствен интерфейс. Също така в това пространство от имена има raycasters за физика и базов клас за описание на поведението на UI елементи - UIBehaviour и задаване на режими на въвеждане.

UI Тук са класовете, пряко свързани с елементите на UI. Включително описание за GraphicRaycaster, както и куп интерфейси, свързани със събития. Това е пространството от имена, което току-що започнах да изследвам, и там се крие ключът към писането на вашите собствени елементи на потребителския интерфейс.