Я пытаюсь использовать MaterialPropertyBlock
в пользовательском спрайт-шейдере, но, похоже, он вызывает Z-бой каждый раз, когда значение изменяется внутри MaterialPropertyBlock
.
.Вы можете увидеть в следующем gif (gif 1) , каждый раз, когда цвет спрайта изменяется, он прыгает вперед и назад, мерцая, как Z-бой.Чтобы было ясно, да, оба спрайта находятся на одном и том же Сортировочном Слое и Порядке.Однако материал спрайта по умолчанию с той же конфигурацией не мерцает и выглядит как gif 2.
gif 1: при использовании MaterialPropertyBlock изменение значения вызывает мерцание
Я попытался использовать базовый материал с тем же нанесенным шейдером, и у него не было проблем с мерцанием.Таким образом, проблема определенно имеет отношение к MaterialPropertyBlock
.
gif 2: использование основного материала работает отлично (но неэффективно)
Итак, мой вопрос: я неправильно использую MaterialPropertyBlock
?Это известный артефакт?Как вы справляетесь с этим?
SpriteRenderer spriteRenderer;
MaterialPropertyBlock mpb;
void OnEnable()
{
spriteRenderer = GetComponent<SpriteRenderer>();
mpb = new MaterialPropertyBlock();
spriteRenderer.GetPropertyBlock(mpb);
}
void Update()
{
mpb = new MaterialPropertyBlock();
mpb.SetColor("_OutlineColor", OutlineColor);
spriteRenderer.SetPropertyBlock(mpb);
}