统一参考和更改网格渲染器上的材质

时间:2018-07-16 21:53:24

标签: c# unity3d

我正在使用Unity,而我的旧模型(带有纹理/材质的简单多维数据集)正在使用我的眨眼代码。 (网格被击中,它“闪烁”)。现在,我有一个搅拌机的朋友制作了新型号,并调整了眨眼代码以获取正确的材料并使它们眨眼。但是代码并没有出错,但是它什么也没做。

这很简单(所以我想)我正在尝试做的事情却无济于事。

MeshRenderer myRend;
void Start () {
        #store reference for later
        myRend = gameObject.GetComponent<MeshRenderer> ();
}

...稍后发生碰撞:

myRend.materials[1] = null; //or use another material still shows original material name down below
Debug.Log("Mat change: " + myRend.materials[1].name);

它仍然显示原始名称不是null吗?因此我的其余代码几乎无法正常工作: (闪烁材料只是白色材料) (我也知道我为材料选择了正确的索引)

IEnumerator CollideFlash()
 {
  case 2:
            myRend.materials[1] = blinkMaterial;
            Debug.Log("Mat change: " + myRend.materials[1].name);

            myRend.materials[1].color = Color.white;

            yield return new WaitForSeconds(0.1f);
            //change it back from white to this
            myRend.materials[1] = m;
            myRend.materials[1].color = c;
            break;

... ... .. 

我知道上面的代码执行了,但是似乎没有什么改变。

1 个答案:

答案 0 :(得分:2)

第一个材料是materials [0]而不是material [1],如果存在material [1](并且我认为一定是因为您没有得到空指针错误),它可能不是您的主要材料在更改MeshRenderer上的材质时看到。

您也可以尝试通过meshRenderer.shaderdMaterial访问它。

还请注意,将颜色修改器乘以反照率纹理,因此,如果您使用的是纹理,则将颜色设置为白色不会改变任何内容-仍然相同的纹理(乘以黑色)会使颜色变暗。纹理