为什么更改对象的比例会破坏其子对象的着色器?

Why does changing the scale of my object break its child's shader?

我有一个玩家游戏对象。每当我改变方向时,我都会翻转玩家的 x 比例尺,所以他面向右时为 1,面向左时为 -1。

此代码负责翻转播放器比例和水平移动播放器:

void FlipScale()
{
    facingRight = !facingRight;
    transform.localScale = new Vector2(transform.localScale.x * -1, transform.localScale.y);
}

void MoveHorizontally()
{
    if (wantsToMoveLeft && wantsToMoveRight) { return; }

    if (wantsToMoveRight)
    {
        rb.velocity = new Vector2(runVelocity, rb.velocity.y);
        if (!facingRight) { FlipScale(); }
    }
    else if (wantsToMoveLeft)
    {
        rb.velocity = new Vector2(-runVelocity, rb.velocity.y);
        if (facingRight) { FlipScale(); }
    }
}

玩家对象有一个子对象,它有使用这个着色器的主精灵渲染器material:

连续将 Fade 从 1 更改为 0 会产生玩家溶解的效果,最终在 0 时完全消失。这是中途的样子:

但是,当我使用上面的脚本翻转播放器时,着色器中断,播放器消失。此外,当我将 Fade 值从 1 更改为恰好小于 0.1 时,播放器突然出现发光:

再次翻转 sprite 并不能解决问题。此外,通过检查器翻转 sprite 不会破坏着色器,只有当我通过代码进行操作时才会如此。我使用本教程创建了这个着色器:https://www.youtube.com/watch?v=WiDVoj5VQ4c。这是我当前的着色器图:

我刚开始使用着色器,如果问题很明显,我深表歉意。我在堆栈溢出和其他网站上尝试了很多修复,但到目前为止没有任何效果。如果我没有包含足够的信息,请询问。

编辑 1:发现当着色器中断时,只要 Fade 值低于 Edge 值,播放器就会开始发光。如果相同或以上,播放器看起来正常,但溶解效果仍然不起作用。

编辑 2:更改为无光照着色器无法解决问题。

所以我最近又回到了这个项目,测试了一个小时左右,当我发现问题时,我非常努力地捂着脸。

我正在使用 Vector2 翻转比例!!! Vector2 默认 z 值为 0。这就是为什么在检查器中翻转它没有破坏任何东西...

解决方案是像这样简单地使用 Vector3:

transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, tranform.localScale.z);

或:

transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, 1f);