Запуск, перезапуск и диагностика 2D-игры
Ожидаемые состояния готовой игры, причины типичных отказов и границы этого прототипа.
Запустите весь проект
Сохраните документы и код, соберите C# без ошибок. Назначьте главным Levels/Arena.rscene и используйте F5 либо меню рядом с Play → Run Project (Main Scene). Основная Play-кнопка и F6 запускают открытый документ: у Player.rprefab это только игрок, без кнопки, счёта и противников.
| Действие | Результат |
|---|---|
| Открыть главный уровень | Счёт 0, видна кнопка начала; игрок пока не двигается |
| Нажать кнопку | Управление включается, кнопка скрывается, круги появляются каждые 0,75 игровой секунды |
| Двигаться по диагонали | Скорость не выше движения вдоль одной оси |
| Дождаться очередной секунды | Счёт увеличивается на 1 |
| Коснуться круга | Раунд останавливается, новые круги и очки не появляются |
| Нажать «Ещё раз» | Счёт 0, игрок в (320, 300), старые круги удаляются к концу кадра |
| Повторить поражение и запуск | Каждая кнопка и таймер по-прежнему дают одно действие |
Найдите причину отказа
| Проблема | Что проверить |
|---|---|
Проект отклонён как Unsupported project / ошибка схемы | Сверьте готовый архив со сборкой движка, для которой он опубликован. Не подменяйте project_schema вручную: это не исправление игрового кода |
| SDK / пакет не найден | Полная поставка, папки dotnet и NuGet рядом с редактором, окружение отдельного терминала |
| C# не собирается | Все четыре полных класса присутствуют; файл совпадает с именем класса; старая версия скрипта заменена целиком |
| Нет игрока или круга | Прикреплён скрипт с _Draw(), успешна сборка, объект внутри окна и видим |
| Игрок не движется | Нажата кнопка начала, у окна есть фокус, четыре действия Input Map имеют привязки |
| Круги не появляются | В F5 запущен Arena, есть SpawnTimer, Prefabs/Enemy.rprefab содержит DodgeEnemy |
| Нет поражения при пересечении | Layer 1 у игрока, Mask 1 и Monitoring у противника, две действующие формы |
| Два очка за тик или два запроса начала | Нет второго соединения тех же сигналов из редактора или другого скрипта |
| Сразу проигрыш после перезапуска | Старый противник не обработан после QueueFree(); сохранена проверка IsQueuedForDeletion() |
| Интерфейс пуст или слишком мал | Пути Root/..., видимость, размеры элементов и нужный документ |
Команда Debug → Visible Collision Shapes помогает сравнить физику и рисунок. Не меняйте слой «наугад»: у каждого объекта известная роль и конкретная маска.
Изменение механики
Чтобы изменить скорость игрока, задайте Speed в инспекторе. Для частоты противников меняйте SpawnTimer.WaitTime, для скорости падения — Velocity у исходного Enemy.rprefab. Сохранённые значения инспектора могут перекрывать начальные значения C#.
Изменение размера поля требует обновить границы игрока, диапазон появления, порог удаления и layout интерфейса вместе. Перед экспортом проверьте настройку главного уровня и шаблонов. При необходимости сохранения рекорда используйте явный формат в user://; текущий Score живёт только в памяти.
Прототип проверяет один локальный раунд. Проверки физики и кода не заменяют запуск на целевом устройстве, визуальную проверку UI и тест реальных устройств ввода. Скачать те же файлы проекта.