Reputation: 710
I wrote the following code to see if I can assign a random color to an object. What am I missing that the object never changes color?
using UnityEngine;
public class ColorManager : MonoBehaviour
{
private void Start()
{
Shader shader = Shader.Find("Diffuse");
Material mat = new Material(shader) {hideFlags = HideFlags.HideAndDontSave};
mat.color = new Color(Random.value, Random.value, Random.value);
}
}
Upvotes: 1
Views: 319
Reputation: 90649
You created a material but you don't assign that material to anything ...
You probably want to assign it to Renderer.material
something like
public class ColorManager : MonoBehaviour
{
// Reference this via the Inspector
[SerializeField] private Renderer targetRenderer;
private void Start()
{
// As fallback look for a renderer on this object
if(!targetRenderer) targetRenderer = GetComponent<Renderer>();
var shader = Shader.Find("Diffuse");
var mat = new Material(shader) { hideFlags = HideFlags.HideAndDontSave };
mat.color = new Color(Random.value, Random.value, Random.value);
targetRenderer.material = mat;
}
}
Actually there is no need to create a new material at all. You could simply use the already existing one. Only create a new one as fallback:
public class ColorManager : MonoBehaviour
{
[SerializeField] private Renderer targetRenderer;
private void Start()
{
if(!targetRenderer) targetRenderer = GetComponent<Renderer>();
var mat = targetRenderer.material;
if(!mat)
{
Shader shader = Shader.Find("Diffuse");
mat = new Material(shader) { hideFlags = HideFlags.HideAndDontSave };
}
mat.color = new Color(Random.value, Random.value, Random.value);
}
}
Upvotes: 1