Решили: частица рождается в ПОЛНЫЙ размер — кривая sizeOverLifetime теперь 1.0 → 0.25
(спад к смерти), а не 0.40 → 0.20; сверху startSize поднят в 2–2.5 раза во всех шести префабах
Prefabs/Vfx. Минимум бёрста поднят с нуля до 60% максимума. Пиковый размер искры удара:
0.036 → 0.216 мировых единиц, то есть с ~2 пикселей до ~13 при юните высотой 1.61.
Почему: боевых эффектов не было видно, и причина оказалась не в слоях, не в блендинге и не в
подключении — всё это исправно (шесть VfxData заполнены, OverheadFX/GroundFX существуют и
упорядочены верно, тумблеры включены, эффект в упор даёт maxDelta 0.90 на тёмном фоне).
sizeOverLifetime умножал размер на 0.40 в момент рождения, поэтому заявленный в инспекторе
startSize не наступал никогда. Альтернатива «просто поднять startSize, кривую не трогать»
отвергнута: она оставляет множитель-душилку и требует вписывать в поле числа вдвое больше реальных —
после этого из ассета нельзя прочитать фактический размер частицы, а именно этой слепоты нам и
хватило, чтобы не замечать проблему.
Грабли:
sizeOverLifetimeне виден ни изstartSize, ни изVfxData. Аудит, считающий размер поstartSize, врёт в 2.5 раза — сначала я так и посчитала и назвала причиной «контраст на белом теле». Контраст — вторичен: после правки площадь эффекта выросла в 2–4 раза, а средняя дельта на белом силуэте уhit_sparkосталась 0.09, потому что светлое поверх белого добавить нечего. Это отдельная, ещё не закрытая задача (цвет/тёмное ядро/спавн по кромке силуэта).- Кривую нельзя переписывать всем подряд. У
Vfx_CastBurst/Coreона РАСТЁТ (0.35 → 0.90) — это расширяющееся ядро вспышки, и спад ломает замысел; уRingона гасла в ноль осмысленно. Обе сломаны единым проходом и возвращены отдельной правкой. Правило: трогать только кривые, душащие старт, то естьcurve.Evaluate(0) < 1. - Замер делался контактными листами в preview-сцене вне play mode:
ParticleSystem.Simulateтам и симулирует, и рендерится. Детерминизм — только принудительнымuseAutoRandomSeed = false+randomSeed: у всех префабов на диске стоитautoRandomSeed: 1, и без этой правки два прогона дают разный рой, а лист «до/после» становится нечитаемым.
Владелец правды: Assets/_Project/Prefabs/Vfx/*.prefab (значения размеров и бёрстов),
Assets/_Project/Scripts/Presentation/PooledVfx.cs (рантайм-множители количества и тинта),
Assets/_Project/ScriptableObjects/Configs/CombatFeelConfig.asset (_vfxHitCountMin/Max,
_vfxHitIntensityMin/Max).