【问题标题】:Material affecting all prefabs?影响所有预制件的材料?
【发布时间】:2017-04-06 03:50:01
【问题描述】:

我正在开发 2D 平台游戏。我有一个带有材质和着色器的精灵,我找到了here。

着色器有一个值属性影响精灵的溶解效果, 但是如果我在我的场景中有多次相同的游戏对象(作为预制件或通过代码实例化),更改一种材质上的溶解值会影响具有相同材质的所有游戏对象(我尝试更改材质名称、克隆材质和所有类型的东西),我想我现在低估了它的发生,因为我使用了相同的精灵(图像)

我能做些什么来避免这种行为?

float dissolvePower = dissoleMaterial.GetFloat(dissolveProperty);        
float minus = -0.1f;
while (dissolvePower > 0)
{
    //print(dissolvePower);
    dissolvePower += minus;           
    dissoleMaterial.SetFloat(dissolveProperty, dissolvePower);           
    yield return new WaitForSeconds(0.07f);
}
print("Exit DeathDissolve()");
Destroy(gameObject);

【问题讨论】:

  • 贴出你用来改变材质或颜色的代码
  • 你应该用代码编辑你的答案,因为它在评论中不是特别可读。

标签: unity3d 2d shader sprite


【解决方案1】:

您正在为每个游戏对象使用相同材质。

因此,如果您更改材质的属性(如溶解值),无论您是在游戏对象的检查器中还是在材质本身上执行此操作,您都将更改使用该材质的每个游戏对象的值。

为避免这种情况,您需要另一种材料。您可以复制材质,将其命名为不同的名称,然后将该材质应用到您想要与众不同的 GameObject。

【讨论】:

  • 感谢您的回答...是的,我知道,我正在更改每个游戏对象的材料,其他游戏对象不受更改的影响,只有具有相同精灵的对象!
  • 材质materialClone = Instantiate(materialDissolve);
猜你喜欢
  • 2021-10-15
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多