change water color through script when an action occurs

is there anyway to create a script that can change the color of water when an action happens IE a bomb blowing up thank you.

You probably want Material.color or Material.SetColor(). If you’re new to those, “How do I change a material color?” is a pretty common question.

Is that what you’re wanting help with? Or were you more concerned with that bomb bit?


you can access the ‘horizon color’, which is actually the water color, via script using the shader like this:

Considering ‘water’ has the reference to the GameObject Water,

to get the color, do:


to change the color, do:

water.renderer.material.SetColor("_horizonColor", theNewColor);

if you want the color to gradually change from one to another, use the Lerp method like this, script :

using UnityEngine;
using System.Collections;

public class WaterLerp : MonoBehaviour {
	public float smooth = 2;
	private Color newWaterColor;
	private GameObject water;
	void Start () {
		water = GameObject.FindWithTag("Water");
		newWaterColor = water.renderer.material.GetColor("_horizonColor");
	void Update () {
	void ColorChanging(){
		Color waterColorBlack = new Color(0.0f,0.0f,0.0f,1.0f);
		Color waterColorGrey = new Color(0.145f,0.165f,0.18f,1.0f);    		
		if(/*Something happens*/){
			newWaterColor = waterColorBlack;
		if(/*Something else happens*/){
			newWaterColor = waterColorGrey;

		water.renderer.material.SetColor("_horizonColor", Color.Lerp(water.renderer.material.GetColor("_horizonColor"), newWaterColor, Time.deltaTime * smooth));

It works fine,

Unity rules,