Практические рецепты
Короткие решения для типовых задач, которые можно перенести в собственную архитектуру.
Последний маркер на Canvas
void OnHit(VorivoxHit hit)
{
marker.anchoredPosition = hit.ToCanvasLocal(playfield);
marker.gameObject.SetActive(true);
}
Защита от повторного shot_id
readonly HashSet<string> processed = new();
void OnHit(VorivoxHit hit)
{
if (!processed.Add(hit.ShotId)) return;
ResolveShot(hit);
}Очищайте набор при старте нового сеанса и ограничивайте его размер числом выстрелов сценария.
Отсчёт без блокировки
async Task BeginAsync(VorivoxSessionStart start)
{
await countdown.ShowAsync(start.CountdownMs);
round.EnableInput();
}
Потеря фокуса
Не завершайте игру самостоятельно. Launcher может отправить session.pause с причиной focus_lost. Заморозьте таймеры и покажите нейтральный системный слой.
Подсветка по результату
await sdk.TriggerLedAsync(points > 0 ? "HIT" : "MISS");Перед использованием расширенных режимов проверяйте sdk.Capabilities.LedOverride.
Фатальная ошибка
try { await LoadLevelAsync(); }
catch (Exception ex)
{
await sdk.LogAsync("error", ex.Message);
ShowOperatorFriendlyError();
}