在运行时更改 GameObject 的 material

Change GameObject's material during runtime

我想实例化四个新游戏对象。我想分配四个 materials,它们是从网络服务器接收到的。现在,我可以创建四个 material 并将图像存储到它们。但是,我无法更改四个游戏对象 material。例如,我想将第一个游戏对象 material 更改为 image0,然后将第二个游戏对象更改为 image1,依此类推。任何人都可以帮助我吗?这是我的代码:

public int k = 0;
public string filename;
public string url;
public string path;
public GameObject newpaper;
public Material material;
public GameObject newObject ;



[MenuItem("GameObject/Create Material")]

void Start () {
    StartCoroutine (LoadImage ());
}


void Update () {

    GetComponent<Renderer> ().material = material;


}

IEnumerator LoadImage(){
    for (int i = 0; i < 4; i++) {

        Instantiate (newpaper);

        filename = "image" + k.ToString () + ".png";
        Debug.Log (k);
        url = "https://wwwfoodparadisehk.000webhostapp.com/" + filename; 
        WWW www = new WWW (url);
        yield return www;

        path = "Assets/MyMaterial" + k.ToString () + ".mat";

        k = k + 1;

        material = new Material (Shader.Find ("Sprites/Default"));
        AssetDatabase.CreateAsset (material, path);


        Debug.Log (AssetDatabase.GetAssetPath (material));

        material.mainTexture = www.texture;

        //GetComponent<Renderer> ().material = material;
        yield return 0;

    }

}

您需要存储 newpaper 的新实例,然后按如下方式设置其 material -

public int k = 0;
public string filename;
public string url;
public string path;
public GameObject newpaper;
public Material material;
public Material planeMaterial;
public GameObject newObject ;

[MenuItem("GameObject/Create Material")]

void Start () {
    StartCoroutine (LoadImage ());
}


void Update () {

}

IEnumerator LoadImage(){
    for (int i = 0; i < 4; i++) {

        GameObject newPaperInstance = Instantiate (newpaper) as GameObject;

        filename = "image" + k.ToString () + ".png";
        Debug.Log (k);
        url = "https://wwwfoodparadisehk.000webhostapp.com/" + filename; 
        WWW www = new WWW (url);
        yield return www;

        path = "Assets/MyMaterial" + k.ToString () + ".mat";

        k = k + 1;

        material = new Material (Shader.Find ("Sprites/Default"));
        AssetDatabase.CreateAsset (material, path);


        Debug.Log (AssetDatabase.GetAssetPath (material));

        material.mainTexture = www.texture;

        newPaperInstance.GetComponent<Renderer> ().material = material;

        // set newpaper's child "Plane"'s material
        newPaperInstance.transform.Find("Plane").gameObject.GetComponent<Renderer>().material = planeMaterial;
        //GetComponent<Renderer> ().material = material;
        yield return 0;

    }

}