Game SDK

↓ Скачать SDK 1.8.1

Внутренняя разработка VORIVOX. Пакет candidate: оставшиеся проверки обозначены в разделе совместимости.

Пример: спортивная мишень

Серия из 10 выстрелов, кольца 1–10, один видимый маркер последнего попадания и общий результат из 100.

Структура сцены

Сцена PrecisionTargetОдин UI-Canvas для интерфейса и отдельный управляющий объект для логики раунда
CanvasИгровой интерфейсНа одном Canvas располагаются мишень, HUD и итоговая панель.
TargetPlayfieldОбласть мишениСодержит графику мишени и точку последнего попадания.
ScorePanelПанель счётаТекущая сумма очков и число попаданий.
ShotCounterСчётчик выстреловПоказывает прогресс: от 1 до 10 выстрелов.
ResultPanelИтог раундаПоявляется после десятого выстрела.
GameControllerУправляющий объектСодержит VorivoxGameSdk, игровую логику и обработчик попаданий.
  • получает событие HitReceived;
  • определяет кольцо по радиусу попадания;
  • заменяет предыдущий маркер на новый;
  • обновляет HUD и завершает раунд после 10 выстрелов.
ОбъектНазначение
RingsФоновая графика колец 1–10.
LastHitMarkerЕдинственный видимый маркер. Каждый новый выстрел должен перемещать его, а не создавать новый экземпляр поверх старого.
ScorePanelПоказывает суммарный результат серии из 10 выстрелов.
ResultPanelПоказывает финальный счёт после завершения серии.
Игрок должен видеть только LastHitMarker. При следующем выстреле предыдущий маркер удаляется или переиспользуется, чтобы не мешать целиться в центр.

Логика попадания

private void OnHit(VorivoxHit hit)
{
    if (!roundActive || shotCount >= 10)
        return;

    Vector2 point = hit.ToCanvasLocal(playfield);
    float radius = point.magnitude / targetRadius;
    int ring = CalculateRing(radius);

    shotCount++;
    totalScore += ring;

    MoveLastMarker(point, ring);
    RefreshHud();

    if (shotCount == 10)
        FinishRound();
}

Расчёт кольца

private static int CalculateRing(float normalizedRadius)
{
    if (normalizedRadius > 1f) return 0;
    return Mathf.Clamp(10 - Mathf.FloorToInt(normalizedRadius * 10f), 1, 10);
}
Для реальной спортивной мишени лучше хранить радиусы колец в конфигурации или ScriptableObject, а не предполагать одинаковую ширину всех зон.
Учебные примеры — скрипты, требующие сцены и назначенных ссылок Unity. Для production обязательны guard паузы/countdown, обработка потери соединения, защита по shot_id и отписка обработчиков. Старые Samples могут требовать адаптации: полнота игровой механики не заявляется.

Playground — браузерная демонстрация общего контракта. Это не Unity Player и не проверка C#-пакета.