Перейти к основному содержимому

C# — Unity, WPF и MAUI

Разработчику

В экосистеме C# графика делится на игровой движок (сцена, компоненты, 3D) и UI-фреймворки (дерево элементов, вёрстка). Оба выходят на GPU, код читается по-разному.


Два направления

НаправлениеСтекМодель в коде
Игры и 3DUnity, MonoGame, StrideGameObject, Update, сцена
Desktop и mobile UIWPF, MAUI, WinFormsXAML, Button, layout

Unity — как читать проект

ЭлементРоль
GameObjectузел сцены
Transformпозиция, поворот, масштаб
MonoBehaviourваш скрипт с Update()
SpriteRenderer / MeshRendererчто рисовать
Cameraviewpoint и culling
  • Update() — логика кадра (аналог update)
  • FixedUpdate() — физика с фиксированным шагом (50 Гц по умолчанию)
  • LateUpdate() — камера следует за игроком после движения

Рендер движок делает сам: batching, frustum culling, освещение. drawArrays вручную — только в custom shader или URP pass.

При открытии проекта ищите MonoBehaviour в Assets/, отличайте Editor scripts (Editor/) от runtime.

См. Разработка игр.


WPF — retained UI на DirectX

  • XAML — декларативное дерево (Grid, Button, Path)
  • Measure → Arrange → Render — layout pass, затем отрисовка
  • с версии 4+ рендер через DirectX
  • Data binding — модель MVVM, UI обновляется при изменении свойств

Кастомная 2D: OnRender(DrawingContext dc) или CompositionTarget.Rendering.

Практикум: WPF в 4.11.


.NET MAUI

Кроссплатформенный UI (Windows, macOS, iOS, Android). На многих платформах рисует Skia (глава 10).

  • GraphicsView + IDrawable — программируемая 2D как Canvas
  • XAML + MVVM по аналогии с WPF

Для игр — Unity или Godot.


WinForms (контекст)

OnPaint + GDI/GDI+ — отрисовка в стиле immediate mode. Подходит для маленьких утилит, слабее HiDPI и сложная графика.


MonoGame и Stride

Фреймворки с явным циклом, без редактора Unity:

protected override void Update(GameTime gameTime) { /* модель */ }
protected override void Draw(GameTime gameTime) { /* render */ }

Тот же каркас, что в Pygame — глава 3.


Где что искать

ВопросUnityWPF
Где модель?поля компонентов, ScriptableObjectViewModel, ресурсы
Где update?Update, FixedUpdateсобытия, таймеры, INotifyPropertyChanged
Где render?движок + Rendererlayout + DrawingContext
Scene graph?HierarchyVisual tree

Связи