为什么更改对象的比例会破坏其子对象的着色器?
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);
我有一个玩家游戏对象。每当我改变方向时,我都会翻转玩家的 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);