Создайте материал из кода и назначьте его объекту

Я очень новичок в Unity3d, у меня есть compilation, содержащий 6 квадов, делающих его кубом. Я хочу добавить текстуры изображений на разные грани куба. Я получаю изображения от webservice, поэтому мне нужно добавить или изменить материал в скрипте. проблема, перед которой я столкнулся, я не могу найти материальную собственность в gameObject.

Я пробовал под кодом:

using UnityEngine; using System.Collections; public class shelfRuntime : MonoBehaviour { public GameObject bottle; public GameObject newBottle; // Use this for initialization void Start () { iterateChildren(newBottle.transform.root); GameObject rocketClone = (GameObject)Instantiate(bottle, bottle.transform.position, bottle.transform.rotation); rocketClone.transform.localScale += new Vector3(1, 1, 1); GameObject newBottleInMaking = (GameObject)Instantiate(newBottle, newBottle.transform.position, newBottle.transform.rotation); Transform[] allChildren = newBottleInMaking.GetComponentsInChildren(); foreach (Transform child in allChildren) { // do whatever with child transform here } } void iterateChildren(Transform trans) { Debug.Log(trans.name); if (trans.name == "Back") { var ting = trans.gameObject.GetComponent(); // trans.renderer.material // there is no material property here } // Do whatever logic you want on child objects here if (trans.childCount == 0) return; foreach (Transform tran in trans) { iterateChildren(tran); } } // Update is called once per frame void Update () { } } 

Как установить материал на квадроциклы? в моем compilationе есть 6 квадроциклов.

Вы больше не можете обращаться к некоторым компонентам напрямую в Unity. Вы должны использовать GetComponent чтобы получить компонент ( Renderer ), затем получить доступ к материалу из него.

 trans.renderer.material = .... 

следует изменить на

 trans.GetComponent().material = yourNewMaterial; 

Наконец, когда Cube или Quad создается в Unity, MeshRenderer автоматически привязывается к ним не Renderer . Таким образом, вы можете получить ошибку времени выполнения с помощью GetComponent() . MeshRenderer этого используйте MeshRenderer .

 trans.GetComponent().material = yourNewMaterial; 

Чтобы создать материал во время выполнения:

 Material myNewMaterial = new Material(Shader.Find("Standard")); 

В приведенном ниже примере будет создан материал, назначить ему стандартный шейдер, а затем измените текстуру на текстуру из переменной myTexture прежде чем применять ее к GameObject.

 public Texture myTexture; void Start() { //Find the Standard Shader Material myNewMaterial = new Material(Shader.Find("Standard")); //Set Texture on the material myNewMaterial.SetTexture("_MainTex", myTexture); //Apply to GameObject trans.GetComponent().material = myNewMaterial; }