How do you add a material and change the size in Mesh Renderer in C# scripting?
I have written this code to generate a procedural cube Sphere.
However I am having some trouble adding materials to the Mesh Renderer via c# scripting.
Can someone please explain to me how to add a material and add/change it's element size in the mesh renderer via scripting?
Here is my script and it fails to produce the material I want.
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] [ExecuteInEditMode()] public class CubeSphere : MonoBehaviour {
 public float radius = 1f;
 public Material Planet = Resources.Load("Planet", typeof(Material)) as Material;
 public int gridSize;
   
 private Mesh mesh;
 private Vector3[] vertices;
 private Vector3[] normals;
 private Color32[] cubeUV;
 private void Awake () {
     Generate();
 }
 private void Generate() {
     GetComponent<MeshFilter>().mesh = mesh = new Mesh();
     GetComponent<MeshRenderer>().material = Planet;
     mesh.name = "Procedural Sphere";
     CreateVertices();
     CreateTriangles();
     CreateColliders();
 }
Answer by Statement · Oct 11, 2015 at 11:21 AM
Use MeshRenderer.materials or MeshRenderer.sharedMaterials.
You'll be working with arrays, so adding, removing or reordering materials would be done on a material array which then is set using any of the two properties mentioned above. Here's one example loading materials into a list, which then is converted to an array.
MaterialExtensions.cs (Extension method for easy resource loading)
 using UnityEngine;
 using System.Collections.Generic;
 
 public static class MaterialExtensions
 {
     public static void AddResource(this ICollection<Material> materials, string resource)
     {
         Material material = Resources.Load(resource, typeof(Material)) as Material;
         if (material)
             materials.Add(material);
         else
             Debug.LogWarning("Material Resource '" + resource + "' could not be loaded.");
     }
 }
CubeSphere.cs
 using UnityEngine;
 using System.Collections.Generic;
 
 [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
 [ExecuteInEditMode()]
 public class CubeSphere : MonoBehaviour
 {
     public float radius = 1f;
     public int gridSize;
 
     private Mesh mesh;
     private Vector3[] vertices;
     private Vector3[] normals;
     private Color32[] cubeUV;
 
     private void Awake()
     {
         Generate();
     }
 
     private void Generate()
     {
         GetComponent<MeshFilter>().mesh = mesh = new Mesh();
 
         List<Material> materialList = new List<Material>();
         materialList.AddResource("Planet");
         materialList.AddResource("Moon");
         materialList.AddResource("Sun");
 
         GetComponent<MeshRenderer>().materials = materialList.ToArray();
 
         mesh.name = "Procedural Sphere";
         CreateVertices();
         CreateTriangles();
         CreateColliders();
     }
     
     // ...
Your answer
 
 
             Follow this Question
Related Questions
Broken materials when trying to export a unity package. 1 Answer
Issue with materials on runtime-loaded mesh. 0 Answers
How do I change the MATERIAL of this mesh when i press T 2 Answers
Assigning a sharedMaterial to multiple renderers that change together 0 Answers
Particle System - Project objects not visible in the 'Select Mesh' window under 'Renderer' 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                