Unity FBX问题
Unity FBX problems
我想让鲸鱼的颜色不一样。
一个会渲染这个皮肤,另一个会渲染另一个皮肤。
但是当我尝试编辑颜色时,其中两个颜色同时发生了变化。
他们的皮肤跟上一个一样。
我该怎么办?
为了优化渲染,当两个相同的对象使用相同的material或网格时,实际上使用的是相同的实例。简单地说,您的两条鲸鱼使用的是相同的 material。这是为了节省绘制调用。
因此,当您更改它时,两者都会更改。
解决方案是复制 material 并将其分配给其中一个。现在您可以更改一个而不影响另一个。您还添加了一个额外的绘图调用。
作为复制 material 的替代解决方案(这可以防止两个鲸鱼进行批处理!),您可以使用 MaterialPropertyBlock
s.
它们通常非常易于使用。在新脚本中,您创建一个 MaterialPropertyBlock,将颜色设置为您希望对象具有的颜色,并将 MaterialPropertyBlock 分配给对象的渲染器。
MaterialPropertyBlock.SetColor() 有一个工作示例,尽管不需要 Draw 调用(这是一个过度设计的示例)。这足够了:
Start() {
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
mpb.SetColor("_MainColor", new Color(1,0,0));
gameObject.GetComponent<MeshRenderer>().SetPropertyBlock(mpb);
}
结果:
从长远来看,这最终会更有效率,因为您可以使用着色器做一些非常复杂的事情,让每个对象都使用相同的单个 material,但它们都有自己独特的外观,并且渲染速度不会受到影响。 困难的部分 是找出要调整的着色器中属性的名称。
当然,结果只有在 运行 处于播放模式时才会显示(除非您将 class 标记为 [ExecuteInEditMode]
)。
我想让鲸鱼的颜色不一样。
一个会渲染这个皮肤,另一个会渲染另一个皮肤。
但是当我尝试编辑颜色时,其中两个颜色同时发生了变化。
他们的皮肤跟上一个一样。
我该怎么办?
为了优化渲染,当两个相同的对象使用相同的material或网格时,实际上使用的是相同的实例。简单地说,您的两条鲸鱼使用的是相同的 material。这是为了节省绘制调用。
因此,当您更改它时,两者都会更改。
解决方案是复制 material 并将其分配给其中一个。现在您可以更改一个而不影响另一个。您还添加了一个额外的绘图调用。
作为复制 material 的替代解决方案(这可以防止两个鲸鱼进行批处理!),您可以使用 MaterialPropertyBlock
s.
它们通常非常易于使用。在新脚本中,您创建一个 MaterialPropertyBlock,将颜色设置为您希望对象具有的颜色,并将 MaterialPropertyBlock 分配给对象的渲染器。
MaterialPropertyBlock.SetColor() 有一个工作示例,尽管不需要 Draw 调用(这是一个过度设计的示例)。这足够了:
Start() {
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
mpb.SetColor("_MainColor", new Color(1,0,0));
gameObject.GetComponent<MeshRenderer>().SetPropertyBlock(mpb);
}
结果:
从长远来看,这最终会更有效率,因为您可以使用着色器做一些非常复杂的事情,让每个对象都使用相同的单个 material,但它们都有自己独特的外观,并且渲染速度不会受到影响。 困难的部分 是找出要调整的着色器中属性的名称。
当然,结果只有在 运行 处于播放模式时才会显示(除非您将 class 标记为 [ExecuteInEditMode]
)。