Структура Unity-проекта
Разделяйте платформенную интеграцию, игровую механику и представление. Тогда игру проще тестировать без оборудования и переносить между сценариями.
Рекомендуемое дерево
Assets/Game/
├── Bootstrap/ # SDK composition root, loading, fatal errors
├── Runtime/
│ ├── Domain/ # score rules, rounds, mission state
│ ├── Integration/ # adapters around VorivoxGameSdk
│ ├── Presentation/ # UI, VFX, audio
│ └── Content/ # ScriptableObject configurations
├── Scenes/
│ ├── Boot.unity
│ └── Game.unity
├── Tests/
│ ├── EditMode/
│ └── PlayMode/
└── StreamingAssets/
Интеграционная граница
Не раздавайте ссылку на SDK каждому объекту. Создайте один VorivoxSessionAdapter, который переводит события платформы в команды вашей доменной модели. Это уменьшает связанность и упрощает автоматические тесты.
public interface IShotSource { event Action<Shot> Shot; }
public interface ISessionControl { event Action Started; event Action Paused; }
// VorivoxSessionAdapter implements both interfaces and is the only
// class that references VorivoxGameSdk directly.
Boot и Game
| Boot | Game |
|---|---|
| SDK, проверка Manifest, загрузка, экран ошибки | Механика, уровни, HUD, VFX, музыка |
| Не уничтожается при смене сцены | Можно перезагрузить без разрыва платформенного соединения |
Данные
Баланс и геометрию храните в ScriptableObject; изменяемый прогресс текущего сеанса — в памяти; долговременные пользовательские данные — только в Manifest.Paths.PersistentDir.