Коротко
Phaser 3 остаётся рабочей лошадкой большинства туториалов и примеров. Phaser 4 (Community Edition) чистит API, сильнее опирается на TypeScript и иначе собирает пайплайн рендера. Если игра уже в проде на 3.60+ и стабильна — срочно мигрировать не нужно. Если стартуете новый проект и хотите типы из коробки — смотрите 4.
Ниже — практическая развилка, а не обзор маркетинговых слайдов.
Что обычно ломается при переносе
Первыми падают места, где код завязан на внутренности, а не на публичный API. Частые точки: кастомные пайплайны, ручная работа с Texture Manager, устаревшие плагины Arcade Physics и обёртки вокруг this.load.
Сцены как идея остаются. Жизненный цикл init → preload → create → update узнаваем. Меняются детали регистрации и то, как сцена получает зависимости.
Физика и ввод
Arcade Physics в типичной 2D-игре переносится почти линейно: спрайт, тело, collider, overlap. Matter.js и экзотические плагины проверяйте отдельно — версии и сборки расходятся.
Input в целом тот же: pointer, клавиатура, gamepad. Ломается код, который лезет в приватные массисы указателей вместо this.input.
Как мигрировать без героизма
Сначала зафиксируйте версию Phaser 3, на которой игра зелёная. Затем вынесите игровые системы из сцен: спавн, инвентарь, сейвы. После этого поднимайте тонкий каркас на Phaser 4 и переносите по одной сцене.
Не переписывайте твины и анимации «заодно». tweens.add и anims.create лучше тащить как есть, пока не заработает кадр.
Практический совет
Держите два bootstrap-файла: main-v3.ts и main-v4.ts с общим src/game. Так видно, какой слой действительно зависит от движка, а какой — просто ваша игра.