代码之家  ›  专栏  ›  技术社区  ›  Codejoy

在Unity中引用和更改网格渲染器上的材质

  •  0
  • Codejoy  · 技术社区  · 7 年前

    我正在使用unity,我的旧模型(上面有纹理/材质的简单立方体)正在处理我的这个blink代码。(网格被击中,它会闪烁)。现在我有一个朋友在搅拌机里设计了新的模型,我调整了眨眼代码来抓取合适的材料并眨眼。但是代码没有出错,它也没有做任何事情。

    这很简单(所以我想)我想做什么,但没有工作。

    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);
    

    它仍然显示原始名称不是空的?所以我剩下的代码就不起作用了: (闪烁材质只是白色材质) (我也知道我为材料选择了正确的索引)

    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 回复  |  直到 7 年前
        1
  •  2
  •   zambari    7 年前

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

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

    另外请注意,“颜色”修改器与“反照率”纹理相乘,因此如果使用纹理,将“颜色”设置为“白色”不会改变任何内容-它仍然是相同的纹理,与“黑色”相乘,另一方面会使纹理变暗