我正在尝试在自定义的精灵着色器上使用MaterialPropertyBlock
,但是只要在MaterialPropertyBlock
内修改值,它似乎就会引起Z角冲突。
正如在下面的gif (gif 1)中所看到的,每次修改精灵的颜色时,它都会向前和向后跳跃,像Z形战斗一样闪烁。需要明确的是,是的,两个精灵都位于同一“排序层和排序”上。但是,具有相同配置的默认Sprite材质不会闪烁,看起来像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);
}