2D в Unity 6 — Box2D v3 и Hybrid Scenes
2D-pipeline, Box2D v3 в Unity 6.3, multi-threaded physics, Hybrid 2D/3D Scenes.
Эта энциклопедия про 3D, но Unity 6.3 LTS принёс важные 2D-новинки, о которых стоит знать — особенно если у вас гибридный проект (3D мир + 2D HUD/effects) или вы прототипируете 2D-фичу внутри 3D-проекта.
2D-pipeline Unity вкратце
Unity исторически имеет отдельный 2D-стек, который параллелен 3D:
- Sprite Renderer — рисует sprite вместо Mesh.
- Tilemap — массивный паттерн сеточных тайлов с rule tiles.
- 2D Animation — riggable 2D-скелеты (для cutout-анимации).
- 2D Light (в URP) — освещение для sprite-сцен с Normal Map поддержкой.
- Box2D для физики (отдельно от PhysX 3D).
Все 2D-сущности живут на тех же GameObject с Transform (не RectTransform — RectTransform только
для UGUI).
Canvas 2D или PixiJS — sprite-based rendering. С физикой — Matter.js / Box2D в WASM.
Sprite Renderer + Rigidbody2D + Collider2D. Параллельный к 3D стек с Box2D-движком под капотом.
Box2D v3 в Unity 6.3 — почему это важно
В Unity 6.3 LTS произошла главная новинка 2D-стека за годы: переход с Box2D v2 на Box2D v3.
Что меняется:
- Multi-threaded simulation — 2D-физика теперь использует все ядра. До этого Box2D v2 был чисто single-threaded.
- До 10× ускорение на сценах с тысячами тел (по бенчмаркам Unity).
- Новый Continuous Collision Detection — точнее ловит быстро движущиеся объекты, без проскоков сквозь тонкие стены.
- Joints API обновлён — некоторые имена методов поменялись, миграция нужна для существующих проектов.
Включается автоматически в новых проектах 6.3+. Существующие — через Edit → Project Settings →
Physics 2D → Physics Engine: Box2D V3.
Box2D v3 не 100% совместим с v2: некоторые collision callback порядки изменились, joint API скорректирован, behavior penetration resolution может отличаться. Если ваш 2D-gameplay tuned под v2, после миграции проверьте: прыжки, столкновения, joint-цепочки. Unity предоставляет migration guide.
Hybrid 2D/3D Scenes
Ещё одна 6.3-новинка: Hybrid 2D/3D Scenes — официальная поддержка смеси 2D и 3D-объектов в одной сцене с правильной отрисовкой и сортировкой.
Раньше: если нужен 2.5D-проект (например, sprite-персонаж на 3D-фоне), приходилось вручную настраивать sorting layers, billboarding и shader-passes.
Теперь:
- 2D Renderer Feature (URP) умеет принимать 3D-объекты в сцену и правильно их сортировать относительно sprite’ов.
- Pixel Perfect Camera работает с 3D-фоном.
- Light2D и Light3D могут сосуществовать.
Применение:
- 2.5D-платформер — sprite-character в 3D-локации (как Octopath Traveler, Sea of Stars).
- 2D HUD над 3D-миром — Worldspace UI остаётся возможным, но Hybrid даёт больше контроля над sorting.
- Карты-миниатюры — 2D-overlay рендерит схематичный 3D в реальном времени.
Минимальный 2D-пример
Контроллер 2D-персонажа:
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D), typeof(BoxCollider2D))]
public class Player2D : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpForce = 8f;
[SerializeField] private LayerMask groundMask;
[SerializeField] private Transform groundCheck;
private Rigidbody2D _rb;
private bool _isGrounded;
private void Awake() => _rb = GetComponent<Rigidbody2D>();
private void FixedUpdate() {
// Box2D v3: тот же API, но multithreaded под капотом
_isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.1f, groundMask);
float horizontal = Input.GetAxis("Horizontal");
_rb.linearVelocity = new Vector2(horizontal * speed, _rb.linearVelocity.y);
// Заметьте: linearVelocity и для Rigidbody2D (раньше — velocity)
if (_isGrounded && Input.GetButtonDown("Jump")) {
_rb.linearVelocity = new Vector2(_rb.linearVelocity.x, jumpForce);
}
}
}
Кардинальной разницы с 3D-кодом не видно — API параллельный (Rigidbody2D ↔ Rigidbody,
Collider2D ↔ Collider, Physics2D ↔ Physics). Box2D v3 работает прозрачно — никаких
изменений в коде не требуется.
2D в гибридных 3D-проектах
Типовые сценарии, где 2D-фичи попадают в “3D-проект”:
- Particle Effects через Sprite Sheets — на старом железе дешевле, чем VFX Graph.
- Map UI — поверх 3D-сцены отдельный Camera с 2D Renderer.
- Cutscene flashbacks в стиле комикса — переключение на 2D-камеру + sprite-сцена.
- Inventory grid — Tilemap для отрисовки grid-ячеек.
Для гибридных сцен:
GameScene
├── World3D (Node3D, layer = "3D")
│ ├── Player
│ └── Environment
├── World2D (Node3D, layer = "2D")
│ ├── BackgroundSprite (SpriteRenderer)
│ └── ParticlesOverlay
└── HybridCamera (Camera with both layers)
Конфигурируйте Culling Mask и Sorting Group на сцене.
Когда 2D — правильный выбор
- Гарантированно 2D-игра — лучше использовать выделенный 2D Renderer, оптимизированный.
- Pixel-art стилизация — 2D-пайплайн поддерживает Pixel Perfect Camera, custom shaders для pixelation.
- Performance-критичные сцены с тысячами объектов — Box2D v3 быстрее PhysX.
Когда не стоит “забирать в 2D”
- 3D-геометрия со sprite-фасадом — лучше использовать 3D-quad с Unlit shader, чтобы держать всё в одном pipeline.
- Real-time lighting effects на sprite в 3D-сцене — может конфликтовать с GI / Adaptive Probe Volumes. Тестируйте.