Material properties let you change how objects look in your game. You can make things shiny, rough, or colorful.
When you want to change the color of a game object during gameplay.
To make an object look shiny or matte by adjusting its smoothness.
When you want to add textures or patterns to surfaces.
To control transparency or glow effects on objects.
When you want to animate material changes, like fading or flashing.
Syntax
Unity
Material material = GetComponent<Renderer>().material;
material.SetColor("_Color", Color.red);
Color currentColor = material.GetColor("_Color");
Use the exact property name as defined in the shader, like "_Color" for the main color.
Always get the material from the Renderer component to access its properties.
Examples
This changes the object's color to blue.
Unity
Material mat = GetComponent<Renderer>().material;
mat.SetColor("_Color", Color.blue);
This reads how shiny the material is.
Unity
Material mat = GetComponent<Renderer>().material;
float smoothness = mat.GetFloat("_Glossiness");
This makes the material very shiny.
Unity
Material mat = GetComponent<Renderer>().material;
mat.SetFloat("_Glossiness", 0.8f);
Sample Program
This script changes the object's color to green when the game starts and prints a message in the console.
Unity
using UnityEngine;
public class ChangeMaterialColor : MonoBehaviour
{
void Start()
{
Material mat = GetComponent<Renderer>().material;
mat.SetColor("_Color", Color.green);
Debug.Log("Material color changed to green.");
}
}
OutputSuccess
Important Notes
Changing material properties at runtime creates a unique copy of the material for that object.
Use sharedMaterial if you want to change the material for all objects using it, but be careful as it affects all instances.
Check the shader documentation for the correct property names to use with SetColor, SetFloat, etc.
Summary
Material properties control how objects look in Unity.
You can change colors, shininess, and textures by accessing these properties.
Always get the material from the Renderer component before changing properties.
Practice
(1/5)
1. What does renderer.material.color control in Unity?
easy
A. The position of the object
B. The color of the object's material
C. The texture applied to the object
D. The size of the object
Solution
Step 1: Understand the property name
The property color inside renderer.material refers to the color attribute of the material.
Step 2: Relate to object appearance
Changing this property changes how the object looks in terms of color, not texture, position, or size.
Final Answer:
The color of the object's material -> Option B
Quick Check:
renderer.material.color changes color [OK]
Hint: Color property changes object color, not texture or size [OK]
Common Mistakes:
Confusing color with texture
Thinking it changes object position
Assuming it changes object scale
2. Which of the following is the correct way to set a material's color to red in Unity C#?
easy
A. renderer.material.color = Color.red;
B. renderer.material.color = "red";
C. renderer.material.color = new Color(255, 0, 0);
D. renderer.material.color = Color(1, 0, 0);
Solution
Step 1: Check Unity color assignment syntax
Unity uses predefined colors like Color.red or new Color(float r, float g, float b) with values between 0 and 1.
Step 2: Evaluate each option
renderer.material.color = Color.red; uses Color.red correctly. renderer.material.color = "red"; uses a string which is invalid. renderer.material.color = new Color(255, 0, 0); uses integers 255 which is incorrect for Color. renderer.material.color = Color(1, 0, 0); misses new keyword and uses wrong syntax.
Final Answer:
renderer.material.color = Color.red; -> Option A
Quick Check:
Use Color.red constant for red color [OK]
Hint: Use Color.red constant, not strings or 255 values [OK]
Common Mistakes:
Using string "red" instead of Color.red
Using 255 instead of 1 for color values
Missing 'new' keyword for Color constructor
3. What will be the output color of the object after running this code?
renderer.material.color = new Color(0.5f, 0.2f, 0.7f);
medium
A. Bright green
B. Black
C. Pure red
D. A shade of purple
Solution
Step 1: Understand the Color constructor values
The values represent red=0.5, green=0.2, blue=0.7 on a scale from 0 to 1.
Step 2: Interpret the color mix
Red and blue are medium to high, green is low, so the color will be a purple shade (mix of red and blue).
Final Answer:
A shade of purple -> Option D
Quick Check:
Color(0.5,0.2,0.7) = purple shade [OK]
Hint: Red + Blue mix with low green = purple shade [OK]
Common Mistakes:
Assuming values are 0-255 instead of 0-1
Confusing color channels order
Thinking low green means green color
4. Identify the error in this Unity C# code snippet that tries to change material shininess:
renderer.material.shininess = 0.8f;
medium
A. Material does not have a 'shininess' property directly accessible
B. The value 0.8f is out of range
C. Missing semicolon at the end
D. Should use renderer.material.color instead
Solution
Step 1: Check if 'shininess' is a direct property
Unity's standard material does not have a direct 'shininess' property; shininess is controlled via shader properties like '_Glossiness'.
Step 2: Correct way to set shininess
You must use renderer.material.SetFloat("_Glossiness", 0.8f); to change shininess.
Final Answer:
Material does not have a 'shininess' property directly accessible -> Option A
Quick Check:
Use SetFloat for shininess, no direct property [OK]
Hint: Use SetFloat("_Glossiness", value) for shininess [OK]
Common Mistakes:
Trying to access non-existent 'shininess' property
Confusing shininess with color
Ignoring shader property naming
5. You want to change the texture of a material at runtime in Unity. Which code snippet correctly does this assuming you have a Texture variable named newTexture?
hard
A. renderer.material.SetColor("_MainTex", newTexture);
B. renderer.material.color = newTexture;
C. renderer.material.mainTexture = newTexture;
D. renderer.material.texture = newTexture;
Solution
Step 1: Identify the correct property for texture
The main texture of a material is accessed via mainTexture property.
Step 2: Check each option's validity
renderer.material.mainTexture = newTexture; correctly assigns newTexture to mainTexture. renderer.material.color = newTexture; wrongly assigns texture to color. renderer.material.SetColor("_MainTex", newTexture); uses SetColor with a texture which is invalid. renderer.material.texture = newTexture; uses a non-existent 'texture' property.
Final Answer:
renderer.material.mainTexture = newTexture; -> Option C
Quick Check:
Use mainTexture to set material texture [OK]
Hint: Use mainTexture property to change textures [OK]
Common Mistakes:
Assigning texture to color property
Using SetColor instead of SetTexture
Using wrong property name 'texture'
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.