Está funcionando ahora. Este es el código correcto. InvokeRepeating toma 3 argumentos. Agregué los colores que necesitaba y seleccioné mi renderizador de malla.
using UnityEngine; public class colorchange : MonoBehaviour { public Color []colors; public Renderer rendering; void Start () { InvokeRepeating ("ChangeColor", 0f, 1f); } void ChangeColor() { rendering.material.color = colors[Random.Range(0, colors.Length -1)]; } }public Renderer renderer; void Start() { InvokeRepeating("ChangeColor", 1.0f, 1.0f); } void ChangeColor() { renderer.material.color = new Color(Random.Range(0f,1f), Random.Range(0f,1f), Random.Range(0f,1f), 1.0f); }Un problema importante es que dará un color realmente "feo" en muchas ocasiones. Así que estaría mejor con una colección de colores para elegir:
public Color []colors; public Renderer renderer; void Start() { InvokeRepeating("ChangeColor", 1.0f, 1.0f); } void ChangeColor() { renderer.material.color = colors[Random.Range(0, colors.Length -1)]; }Alguna fuente de información para consultar: https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.htmlhttps://docs.unity3d.com/ScriptReference/Renderer-material.html
El siguiente código usa un bloque de propiedades para cambiar el color del material del renderizador, evitando la creación de un nuevo material (para un mejor rendimiento y creo que es una mejor práctica).
using UnityEngine; [RequireComponent(Renderer)] public class ColorChange : MonoBehaviour { [SerializeField] private float _changeColorAfterSeconds = 1f; private Renderer _renderer; private float _timer = 0f; private MaterialPropertyBlock _block; private void Awake() { _renderer = GetComponent<Renderer>(); _block = new MaterialPropertyBlock(); } private void Update () { _timer += Time.deltaTime; if (_timer >= _changeColorAfterSeconds) { Color newColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f); _block.SetColor("_Color", newColor); _renderer.SetPropertyBlock(_block); _timer = 0f; } } }Para simplemente arreglar su script/hacer que funcione como está:
using UnityEngine; public class colorchange : MonoBehaviour { private float timer = 0f; void Update () { timer += Time.deltaTime; if (timer >= 1f) { Color newColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1.0f); GetComponent<Renderer>().material.color = newColor; timer = 0f; } } }