Решили: оверлей Scene view считает свою модель только в EventType.Repaint, а тяжёлый обход рига
держит в кэше на 0.5 с; точки при этом берутся из живых трансформов при каждой отрисовке.
Почему: SceneView.duringSceneGui вызывается на КАЖДОЕ событие вьюпорта, включая mouseMove.
Оверлей якорей делал на каждом вызове полный обход рига — поиск по путям всех шестнадцати суставов
плюс обход их поддеревьев, — и в prefab stage это ощущалось рукой как залипание редактора.
Сказано: «У меня БЕЗУМНО лагает в этом префабе. Это из-за гизмо и вечных просчетов?» (03.08.2026, сессия d19f7828). Да, из-за них.
Грабли:
- Кэшировать РЕЗУЛЬТАТ целиком нельзя: тогда перетаскивание спрайта отображалось бы с задержкой в полсекунды, а оверлей существует именно ради ответа «куда я тащу это прямо сейчас». Кэш держит состав (какой кусок к какому суставу), позиции и расхождение считаются на лету — они дёшевы.
- Ссылки в кэше переживают закрытие стейджа мёртвыми: проверка
Joint == null || Visual == nullобязательна, иначе первый же кадр после закрытия сыплетMissingReferenceException. - Спрайты рига попали в Sprite Atlas, поэтому
sprite.texture.GetPixels()падает на атласной текстуре. Мерить рисунок надо по ИСХОДНОМУ png с диска (File.ReadAllBytes+LoadImage), не трогая настройки импорта.
Владелец правды: RigAnchorOverlay.cs.