在运行时更改 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;
}
}
我想实例化四个新游戏对象。我想分配四个 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;
}
}