Bonjour, Khabrovites! Je veux vous parler de mon système d'interface utilisateur, que j'ai écrit pour mon moteur de jeu, sur lequel j'en fais un éditeur. Comme ça:
Donc, pour la énième fois, j'ai commencé à écrire le moteur, et j'ai fermement décidé que cette fois je ferais tout bien et correctement. Un de ces "bons et bons" est un éditeur WYSIWYG à la Unity3D. D'ailleurs, avant cela, j'avais déjà de l'expérience dans le développement de tels éditeurs sur Qt. Et à ce moment-là, j'ai déjà compris que la tâche n'est pas facile si je veux faire un très bon éditeur. Et cela nécessite un système d'interface utilisateur très bon et flexible dans lequel je serai très bien versé et connaîtrai toutes sortes de subtilités. En effet, dans un tel éditeur, il y aura beaucoup de widgets personnalisés, de contrôles, etc. Par conséquent, il ne devrait y avoir aucun compromis entre la qualité de l'éditeur et les capacités de l'interface utilisateur du système.
UI. .. 2D , (- , , , ..), UI .
" , ?" - .
, , , - . - . . , .
UI :
UI-
.
UI- : . . - .
UI - , ..
(): , , , . (draw call), , , . API , - .
- , - . , . : , , .
9-slice . , 9 :
, , , , . , .
- , ? ( ) . , - . - .
, , :
- . , , . .
, - .
:
:
,
FreeType
, .. . - , . - , , , - . - , -. , , .
, , . . :
. , . : , , , . . , . , , . , "...", .
, .
- . , , .
IRectDrawable
, IRectDrawable. , ( 23), , , . IRectDrawable IDrawable ( ) Transform ( 23, Basis).
, Graphic API , , . , UI . , , , . , . , . , , .
. : , . . . , .
, - . -, . . , .
- , .
IDrawable , .
, - . - .
( , touch-screen), , , . . .
. -, , . , . - - . , , .
CursorAreaEventsListener. , . , , . , EventsSystem, CursorAreaEventListenersLayer.
? ? ? . , . , , . - , , , , , .
. , . , , .. . , . , "" , , .
. , , .
, . , , . , . , , . . .. IRectDrawable.
, , "" . , , , . - , . , .
, , , , .
. ( , IRectDrawable), IDrawable::OnDrawn(). .
. - Actor, , , , , , Actor'. . - Actor'.
Actor' . , . , , , , Actor'.
UI . , UI - Actor'. Widget.
Widget
"" . Actor , , , , Widget' .
Widgt' WidgetLayout, ActorTransform. , , Actor'.
. . . . , "" , . Unity GUI.
WidgetLayer
Actor', Widget' WidgetLayer. - Widget, IRectDrawable WidgetLayout' WidgetLayerLayout.
, . , .. .
Widget', Widget'. , , . , , .
- Widget', Widget'.
WidgetState
- . , . , .. .
Widget' - WidgetState'. -. - , . . . , . . , . .
. - Actor', Widget', Layout', WidgetLayer' .. , - . , children/0/transform/anchor
.
, . ,
-
-
-
-
, , ..
Widget', .
Widget'
, Widget' Widget, . . - Widget, . - .
, , . Widget', Widget', "" Widget'. , Widget' .
Layout-Widget'
Widget', Widget'. , HorizontalLayout . VerticalLayout, . GridLayout, .
Layout' ( , ), , . .
Layout' :
Widget'. , .
, . Layout', , . ", "
. - , ,
, WidgetLayout
Widget'
UI , . , Widget . Widget , KeyboardEventsListener, CursorAreaEventsListener.
:
Checkbox
,
/ progress-bar
/ scroll bar
- , . .
PopupWidget. . . . , . , , : , .
, .
: anti-aliased
. , OpenGL D3D, , "". .
anti-aliasing'. : , , . , , , .
, . , 8 . . ""
, , , . , , . , . , , . , , 60 .
, . ++ .
Unity3D, . Unity3D " ", , , "", . . , Canvas', , Unity3D.
, , . . , Actor', . - Widget. . .
Widget'
, - Widget', . , . , , . - .
. , API , . , . .
, - Widget , , . - , , .
, Widget' CheckClipping, . : , . , Widget'. - -, . .
Widget' . , , . , .
, . , , .
. , . "" . Widget - , , . Widget' , , . , "" , , . , , , .
, , . , .. .
, ? ? , . , .
:
Widget' . Widget'
Actor'
UI , . .
6 -. . ImGUI, , "" , .