【问题标题】:Assigning multiple materials to a gameobject through script?通过脚本将多种材质分配给游戏对象?
【发布时间】:2019-06-27 00:57:07
【问题描述】:

如何通过 c# 脚本将多个材质分配给一个游戏对象?

到目前为止我尝试过的是:

public GameObject go;
public Material Mat1;
public Material Mat2;
void Start()
{ 
     //this does not work
     go.GetComponent<Renderer>().materials[0] = Mat1; 
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    不能直接更新材质,需要新建一个材质数组并赋值。

    void Start()
        {
            //create your materials
            var yourMaterials = new Material[] { Mat1, Mat2 };
            //assign it
            go.GetComponent<Renderer>().materials = yourMaterials ;
        }
    

    您也可以查看documentation

    请注意,与 Unity 返回的所有数组一样,这会返回 材料阵列。如果要更改其中的某些材料,请获取 值,更改条目并设置材料。

    【讨论】:

    • 同样在Unity Answers,以防6分钟内3个相同类型的答案不够:)。
    【解决方案2】:

    来自文档:

    请注意,与 Unity 返回的所有数组一样,这会返回材质数组的副本。如果要更改其中的某些材质,请获取值,更改条目并设置材质。

    Renderer rend = go.GetComponent<Renderer>();
    Material [] mats = rend.materials;
    mats[0] = Mat1;
    rend.materials = mats;
    

    【讨论】:

      【解决方案3】:

      如果你想改变多种材料,你需要改变整个阵列。 所以你首先创建一个与当前渲染器长度相同的材质数组:

      Material[] newMaterials = renderer.sharedMaterials;
      for(int i = 0; i <newMaterials.Length; i++)
      {
      newMaterials[i] = theMaterialYouWantToSetX;
      }
      

      然后将数组分配给渲染器:

      renderer.materials = newMaterials;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多