Моделирование сцепных устройств для тестирования
Введение преднамеренных задержек является распространенным методом тестирования того, как ваша игра справляется с проблемами производительности, такими как пики задержки, падение кадров, зависание или ухудшение UI чувствительности под напряжением.
Ниже приведен простой скрипт MonoBehaviour, который вы можете прикрепить к любому GameObject в вашей сцене. Он заставляет главный поток зависать через регулярные промежутки времени, имитируя задержку или пик в кадровом времени. Вы можете легко настроить частоту и продолжительность задержек для вашего тестирования.
using UnityEngine;
using Unity.Profiling;
public class HitchSimulator : MonoBehaviour
{
static readonly ProfilerMarker k_HitchSimulatorMarker = new ProfilerMarker("[HitchSimulator] CauseHitch() introducing artificial hitches");
[Tooltip("How often (in seconds) to cause a hitch.")]
public float hitchInterval = 5f;
[Tooltip("How long (in milliseconds) each hitch should last.")]
public int hitchDurationMs = 200;
private float _nextHitchTime = 0f;
void Update()
{
if (Time.time >= _nextHitchTime)
{
Debug.LogWarning($"[HitchSimulator] Causing a hitch for {hitchDurationMs} ms at {Time.time:F2}s");
CauseHitch(hitchDurationMs);
_nextHitchTime = Time.time + hitchInterval;
}
}
void CauseHitch(int durationMs)
{
// Adding a clarifying profiler marker so no one accidentally confuses this for an actual issue.
k_HitchSimulatorMarker.Auto();
float start = Time.realtimeSinceStartup;
// Busy wait for the specified duration
while ((Time.realtimeSinceStartup - start) < durationMs / 1000f)
{
// Just spin
}
}
}
Для использования скрипта:
- Скопируйте скрипт в новый файл C# с названием
HitchSimulator.cs. - Присоедините его к любому активному GameObject в вашей сцене.
- Установите параметры в Inspector:
hitchInterval: Как часто прицеплять. По умолчанию 5 секунд.hitchDurationMs: Как долго длится каждый захват. По умолчанию 200 миллисекунд.
- Перейдите в режим воспроизведения и наблюдайте за намеренными кадровыми задержками в Profiler или визуально как замедление.
Примечание: Этот скрипт блокирует основной поток. Он симулирует реальный пик задержки от тяжелых вычислений, а не просто искусственное замедление. Это может сделать Редактор неответственным, если вы используете очень большие значения. Вы также можете вызвать задержки с помощью нажатий клавиш или случайных интервалов для более надежного тестирования.
Дополнительные ресурсы
- Unity Profiler: Используйте Profiler для мониторинга поведения вашей игры во время задержек.
- Оптимизация производительности: Общие советы по оптимизации производительности в Unity.