help with block placeing script

hey ive been kind of developing a sort of minecrafty game but ive decided that it will be best if it is 3rd person but my new script dosent work and i ave no idear why i get no errors it just dosent work
any way hear is the script

var block: Transform;
var hit : RaycastHit;

function Update () {
if (Input.GetButtonDown ("Fire1")) {
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray)) 
{
var cube = Instantiate(block);
cube.transform.position = hit.transform.position + hit.normal;
}
}
}

and hear is the first person script (works)

var blockLayer : LayerMask = 1;
var range : float = Mathf.Infinity;
var hit : RaycastHit;
private var block : Transform;
var block1 : Transform;
var block2 : Transform;
//var block3 : Transform;
//var block4 : Transform;

function Update () 
{
    if (Input.GetMouseButtonDown(0))
        Build();
    if (Input.GetMouseButtonDown(1))
        Erase();
	if (Input.GetButtonDown("1"))
	block = block1;
	if (Input.GetButtonDown("2"))
	block = block2;
}

function Build() {
    if (HitBlock()) 
	{
        //var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
		var cube = Instantiate(block);
        cube.transform.position = hit.transform.position + hit.normal;
    }
}

function Erase() {
    if (HitBlock())
       Destroy(hit.transform.gameObject);
}

function HitBlock() : boolean 
{
 return Physics.Raycast(transform.position, transform.forward, hit, range, blockLayer);
//var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
}

An example of the proper use of ScreenPointToRay in regards to a Raycast.

var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit, 100)) {
      Debug.DrawLine (ray.origin, hit.point);
}

Available here: