2017-05-06 105 views
0

我想实例化四个新的gameobject。我想分配从Web服务器接收的四种材料。现在,我可以创建四种材质并将图像存储到它们中。但是,我无法改变这四个gameobject材质。例如,我想更改第一个gameobject材质是image0,然后第二个gameobject是image1,依此类推。任何人都可以帮助我?这里是我的代码:在运行时更改GameObject的素材

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; 

    } 

} 

回答

0

您需要存储的newpaper的新实例,然后设置其材料如下 -

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; 

    } 

} 
+0

还有另外一个问题。 gameobject newpaper有父母,它是飞机。我想改变平面材质。我该如何改变它? – HappyChan

+0

您可以使用'newPaperInstance.transform.parent.gameObject'访问gameObject的父级,然后访问它的'Renderer'组件并更改其材质。 :) –

+0

你能为我编辑代码吗?我做不到。我不知道脚本粘贴正确。 – HappyChan