I am assuming you refer to the Image component in the new UI and you want to change the sprite.
Either assign 2 sprites in the prefab:
public Sprite spriteOn;
public Sprite spriteOff;
public bool onOff;
void Start() {
Image imageComponent gameObject.GetComponent<Image>();
if(imageComponent != null) onOff ? imageComponent.sprite = spriteOn : imageComponent.spriteOff;
}
Or change the original sprite:
public bool onOff;
void Start() {
Image imageComponent gameObject.GetComponent<Image>();
if(imageComponent != null) {
if(onOff) {
Sprite baseSprite;
Texture2D tex = baseSprite.texture;
Texture2D newTex = (Texture2D)Texture2D.Instantiate(tex);
Color[] originalPixels = tex.GetPixels(0);
Color[] newPixels = newTex.GetPixels(0);
for (int i = 0; i < originalPixels.Length; i++) {
// As an example we invert the colors
newPixels[i].r = 1f - originalPixels[i].r;
newPixels[i].g = 1f - originalPixels[i].g;
newPixels[i].b = 1f - originalPixels[i].b;
}
newTex.SetPixels(newPixels, 0);
newTex.Apply();
imageComponent.sprite = Sprite.Create(newTex, baseSprite.rect, baseSprite.bounds.center, baseSprite.pixelsPerUnit);
}
}
}
Beware that this instantiates new objects and you have to clean them up when you dont need them anymore.