Unity FBX的问题

时间:2017-09-20 19:20:01

标签: unity3d skin fbx

我想让鲸鱼的颜色不同。

一个人会渲染这个皮肤,而另一个人则是另一个皮肤。

但是当我尝试编辑颜色时,其中两个颜色会同时更改。

他们的皮肤跟随最后一个。

我该怎么办?

enter image description here

2 个答案:

答案 0 :(得分:4)

为了优化渲染,当两个相同的对象使用相同的材​​质或网格时,它实际上是使用的相同实例。简单地说,你的两只鲸鱼使用相同的材​​料。这是为了保存绘制调用。

因此,当您更改它时,它会发生变化。

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

答案 1 :(得分:3)

作为复制材料的替代解决方案(防止鲸鱼同时进行批处理!),您可以使用MaterialPropertyBlocks

它们通常非常易于使用。在新脚本中,您创建一个MaterialPropertyBlock,将颜色设置为您希望对象拥有的颜色,并将MaterialPropertyBlock指定给对象的渲染器。

MaterialPropertyBlock.SetColor()有一个有效的例子,虽然不需要Draw调用(它是一个过度设计的例子)。这就足够了:

Start() {
    MaterialPropertyBlock mpb = new MaterialPropertyBlock();
    mpb.SetColor("_MainColor", new Color(1,0,0));
    gameObject.GetComponent<MeshRenderer>().SetPropertyBlock(mpb);
}

结果:

Only one material

从长远来看,这会变得更有效率,因为你可以使用着色器做一些非常复杂的事情,让每个对象使用相同的单一材质,但是它们都有自己独特的外观,并且渲染速度并不高。受苦。 硬件正在计算着色器中要调整的属性的名称。

当然,结果仅在播放模式下运行时显示(除非您使用[ExecuteInEditMode]标记该类。)