Решили: MenuBattleDirector поднимает BattleStagePresence не при рождении реплей-скоупа, а на
первом кадре, где в фокусе есть бойцы (CombatFocusTarget.HasUnits). И сам подъём сцены переводит
камеру в боевой кадр МГНОВЕННО — CinemachineBrain.ResetState() вместо подводки.
Почему: между рождением скоупа и первым кадром с бойцами проходит несколько кадров — файл читается
в ленту по темпу показа. Подняв сцену раньше, мы посылали камеру в Action к ещё не заданной точке: она
начинала подводку от старого кадра, а через пару кадров CombatFocusTarget снапал цель слежения в
центр дуэли — уже посреди бленда. Отсюда рывок. Вторая жертва того же порядка — PrimeActionZoom: он
выходит по !HasUnits, то есть молча не взводил зум, и тот доезжал отдельным движением (ровно то, от
чего этот метод и защищает).
Мгновенный кадр — решение Макса: подводка уместна, когда игрок уже смотрел на арену и его взгляд
переносят, а фон меню возникает вместе с меню, и «перелёт» показывает дорогу из вида, которого зритель
не видел. Резать через Brain, а НЕ записью Cut в WorldCameraBlends: там правило накрыло бы все
переходы к сценарной камере, включая вход в живой бой из расстановки, где подводка нужна.
Отвергнут и третий вариант — задержка на сплеше (предложение Макса, снятое им же): она лечит одну дверь, а в главное меню возвращаются ещё и из забега, где сплеша нет.
Сказано: «Камера очень-очень резко перемещается со стартового положения в бой в начале. Выглядит не красиво.», «Скорее надо бой запустить еще на стадии загрузки сплеша… Хотя это костыли…» и «Чтобы сразу начиналось на боевом кадре сделай пожалуйста» (04.08.2026, сессия 78678294).
Грабли: бленд был настроен и работал — 0.7 с в DefaultBlend, и в WorldCameraBlends к Action
нет Cut. Поэтому «резко» сначала читалось как «бленда нет», а искать надо было не бленд, а порядок:
подводка ехала честно, но цель под ней переезжала. Ещё одно проявление правила «заказ раньше адресата
теряется» — лечится входным условием, а не задержкой.
Владелец правды: Game/Flow/MenuBattleDirector.cs (_awaitingStage и его ветка в Tick),
Presentation/Camera/CameraModeController.cs (OnStageChanged → CutToActiveNow).