Unity FBX问题

Unity FBX problems

我想让鲸鱼的颜色不一样。

一个会渲染这个皮肤,另一个会渲染另一个皮肤。

但是当我尝试编辑颜色时,其中两个颜色同时发生了变化。

他们的皮肤跟上一个一样。

我该怎么办?

为了优化渲染,当两个相同的对象使用相同的material或网格时,实际上使用的是相同的实例。简单地说,您的两条鲸鱼使用的是相同的 material。这是为了节省绘制调用。

因此,当您更改它时,两者都会更改。

解决方案是复制 material 并将其分配给其中一个。现在您可以更改一个而不影响另一个。您还添加了一个额外的绘图调用。

作为复制 material 的替代解决方案(这可以防止两个鲸鱼进行批处理!),您可以使用 MaterialPropertyBlocks.

它们通常非常易于使用。在新脚本中,您创建一个 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])。