Unit Selector

I’t trying to make it, so when the player clicks on a unit it will select it, and draw a box around the edge on it. I’ve been looking at other questions but I couldn’t get a good answer.

Also the unit will have a specific tag like “unit” and you only can select that specific unit with that tag name.

So this is what I have got now…

#pragma strict
var selected : Transform;
var mask : LayerMask = -1;

var hit : RaycastHit;
function Update() {
    if(Input.GetMouseButtonDown(0) && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit, Mathf.Infinity, mask.value)) {
        if(hit.transform.tag == "Selected") {
            hit.transform.tag = "Unselected";
            selected = null;
        }
        else if(!selected) {
            selected = hit.transform;
            selected.tag = "Selected";
        }
        Debug.Log("clicked" + (selected? "" : " off"));
    }
}

This should check 1/ if object is currently selected, remove reference; and 2/ if object is new selection, remove old reference and store new one. Also, only do raycast if the mouse is pressed, more efficient.

#pragma strict

var selected : Transform;
var mask : LayerMask = -1;
var hit : RaycastHit;

function Update() 
{
    if ( Input.GetMouseButtonDown(0) )
    {
    	if ( Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit, Mathf.Infinity, mask.value) ) 
    	{
	        // if object is currently selected, remove reference
	        if ( hit.transform == selected ) 
	        {
	            selected.tag = "Unselected";
	            selected = null;
	        }
	        
	        // if object is new selection, remove old reference and store new one
	        else if ( hit.transform.tag == "Unselected" ) 
	        {
	            if ( selected ) // remove old reference
	            {
		            selected.tag = "Unselected";
		            selected = null;
	            }
	            
	            // store new one
	            hit.transform.tag = "Selected"; 
	            selected = hit.transform;
	        }
	        
	        // not sure what this debug is doing !
	        //Debug.Log( "clicked" + (selected? "" : " off") );
	        Debug.Log( "clicked " + hit.transform.name + " : selected Object " + selected );
        }
    }
}

Yer I got it working by…

var hit : RaycastHit;
function Update() {
    if(Input.GetMouseButtonDown(0)) {
        var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		if (Physics.Raycast (ray, hit, 100)) {
			print (hit.transform.tag + ":-:" + hit.transform.name);		
			var allboxes = hit.transform.Find("yellowbox");	
			allboxes.transform.renderer.material.mainTexture = selectortext;
		}
    }
}