Toggle on click.

The following script is running an object on object off effect. The problem is when I click on the object it turns it on then right back off. I want it to turn it on the first time you click it then off the next time you click it. That way it works like a switch and you can do this as much as u want.

using UnityEngine;
using System.Collections;

public class ChangeWeather : MonoBehaviour
{
	public bool active = true;
	private Transform child;
	public GameObject child2;
	public bool weatherMan = false;

	void Update () 
	{
	if(weatherMan)
	{
		if(Input.GetMouseButtonDown(0))
		{
			 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
       		 RaycastHit hit;
			
			if(Physics.Raycast(ray, out hit))
			{
				if(hit.collider.tag == "WorldBlocks")
				{
					
					if(active == true)
					{
											 
						foreach(Transform child in hit.transform) 
						{
          			 		child.renderer.enabled = true;
							print ("I am On");
						}


						active = false;
					}
					
						
					if(active == false)
					{
											 
						foreach(Transform child in hit.transform) 
						{
          			 		child.renderer.enabled = false;
							print ("I am Off");
						}


						active = true;
					}
					
					
				}
			}

		}

		}
		
	}
		
}

Try to use if/else and not just if/if on line 25 > 50.

On line 25, if active == true, it sets it to false, then on line 39 it will see that its now false and flip it back to true.

You’ve got this right, just change to:

if(active){
  //what to do when active
  foreach(Transform child in hit.transform) {
  child.renderer.enabled = true;
  print ("I am On");
  }
active = false;
} else {
  //what to do when inactive
  foreach(Transform child in hit.transform) {
  child.renderer.enabled = false;
  print ("I am Off"); 
  }
active = true;
}