Первая игра: пошагово
Соберите вертикальный срез: подключение, ожидание сеанса, десять попаданий, счёт и штатное завершение. Это правильная база для любой дальнейшей 2D/3D-механики.
1. Подготовьте сцену
Создайте объект VORIVOX, добавьте VorivoxGameSdk и импортируйте Sample Starter Kit через Package Manager. В инспекторе назначьте ссылку SDK.
Для Editor включите Mock When Manifest Missing. В релизной сцене значение можно оставить включённым: при штатном запуске Manifest всегда имеет приоритет.
2. Реализуйте безопасный поток
sdk.SessionStarted += BeginRound;
sdk.HitReceived += ResolveHit;
sdk.SessionPaused += PauseRound;
sdk.SessionResumed += ResumeRound;
sdk.SessionStopped += StopRound;
await sdk.ConnectAsync(); // уже дождался server.hello
await LoadAllContentAsync();
await sdk.ReadyAsync("Game"); // только после полной загрузкиГлавное правило:
ReadyAsync означает, что игра действительно готова немедленно принять session.start. Не отправляйте ready до загрузки сцены, шейдеров, звука и критичных Addressables.3. Обработайте попадание
private async void ResolveHit(VorivoxHit hit)
{
if (!roundActive) return;
Vector2 point = hit.ToCanvasLocal(playfield);
int points = scoreMap.Resolve(point);
shots++;
score += points;
if (points > 0) hits++;
await sdk.UpdateScoreAsync(new VorivoxScore(score, shots, hits, timeLeftMs));
}
4. Завершите один раз
await sdk.CompleteAsync(new VorivoxResult(
"completed", score, shots, hits, durationMs,
sdk.Manifest.Session.PlayerCount));CompleteAsync защищён от повторного вызова. Всё равно сведите таймер, кнопку выхода и условие победы в единую функцию завершения.
5. Проверьте три сценария
python3 tools/mock_launcher.py --scenario basicpython3 tools/mock_launcher.py --scenario pausepython3 tools/mock_launcher.py --scenario device-fault