Cambiar los colores del botón de la interfaz de usuario a través de la secuencia de comandos

Estoy tratando de cambiar los colores en un botón de la interfaz de usuario usando esta línea de código.

prev.GetComponent<Button>().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);

pero recibo este error

Assets / _Scripts / OptionSwitch.cs (28,53): error CS1612: No se puede modificar un valor de retorno de tipo de valor de `UnityEngine.UI.Selectable.colors '. Considere almacenar el valor en una variable temporal

Intenté almacenar tanto el botón como el color como variables antes de llamarlos, pero no cambia el código de error.

EDITAR:

using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Sprites;

public class OptionSwitch : MonoBehaviour {

    ColorBlock colorBlock = new ColorBlock();
    colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);

    [MenuItem ("GameObject/UI/Switch")]
    static void Switch(){

        if (GameObject.FindObjectOfType (typeof(Canvas)) != null) {

            Canvas canvas = (Canvas)GameObject.FindObjectOfType (typeof(Canvas));

            // Define Previous Button
            GameObject prev = new GameObject ("Previous", typeof(Button));
            prev.layer = 5;
            prev.AddComponent<Image> ();
            prev.transform.parent = canvas.transform;

            prev.GetComponent<Image> ().sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UISprite.psd");
            prev.GetComponent<Button>().colors = buttonColors;

            // Define Previous Button Image
            GameObject previm = new GameObject("Previous Image", typeof(RawImage));
            previm.layer = 5;
            previm.transform.parent = prev.transform;

        } else {

            // Create Canvas
            GameObject canvas = new GameObject("Canvas", typeof(Canvas));
            canvas.AddComponent<CanvasScaler> ();
            canvas.AddComponent<GraphicRaycaster> ();
            canvas.layer = 5;
            canvas.GetComponent<Canvas> ().renderMode = RenderMode.ScreenSpaceOverlay;
            canvas.transform.localPosition = Vector3.zero;

            // Create Event System
            GameObject eventsystem = new GameObject("EventSystem", typeof(EventSystem));
            eventsystem.AddComponent<StandaloneInputModule>();
            eventsystem.AddComponent<TouchInputModule>();

        }

    }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta