Refactoring a collection of if statements that contain 2 arguments.
We can start looking at what is duplicated.  For example, the only difference between the two blocks of code is the string "Color1" and "Color2" in the if statement, and the variable new_colour1 which is replaced with new_colour2.

From here I'd suggest something like the following:

//This should be declared once - e.g. class level not method level.
var colorDict = new Dictionary&lt;string, NewColorType&gt; 
                    {
                        {"Colour1", new_colour1}, 
                        {"Colour2", new_colour2}
                    };
NewColorType newColor;
if(start_time &gt; look_at_time &amp;&amp; colorDict.TryGetValue(hit.collider.gameObject.tag, out newColor))
{
   newColor.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
   var colums = GameObject.FindGameObjectsWithTag("column");
   foreach( GameObject c in colums)
      c.GetComponent&lt;MeshRenderer&gt;().materials[1].color = newColor.orignalMaterial;
}