Looking for a grid-system

So, I’m trying to figure out how to modify Unity a bit I guess, I want the map to be a tile-based system…

The reason for doing this is I want to create a RTS type game, similar to the old age of empires, although I know this won’t be easy I’m just trying to figure out a way to do the drawing so far. I’ve decided to pick up A* Pathfinding for my AI and learn how to use that, although I thought if the whole game was based on tiles it would be easier to configure A*

Besides, that would allow me to Make buildings a set square/rectangle and take up a certain amount of a zone, and use box colliers for everything, including units. So, I’m looking for a way to make it all completely tile based.

It would be nice if I could find a good example of an RTS Game to download and learn from, althoguh there aren’t any that I’ve found using unity, I’m not afraid to move away from unity although me and my friends want to do something using this game-engine, so we are trying to learn how to use it effectively.

Something like this?
you still need to finish some of the code… but it’s a start.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SimpleBuild : MonoBehaviour 
{
	public string buildState = "None";
	public List<GameObject> BuildItems;
	public int BuildItemNr;
	public GameObject GhostObject;
	
	public Ray ray;
    public RaycastHit hit;
	public LayerMask mask = -1;
	
	void Start ()
	{
		ChangeBuildingItem(0);
	}
	
	// Update is called once per frame
	void Update ()
	{
		if (Input.GetKeyDown(KeyCode.Alpha1)) ChangeBuildingItem(0);
		if (Input.GetKeyDown(KeyCode.Alpha2)) ChangeBuildingItem(1);
		if (Input.GetKeyDown(KeyCode.Alpha3)) ChangeBuildingItem(2);
		if (Input.GetKeyDown(KeyCode.Alpha4)) ChangeBuildingItem(3);
		if (Input.GetKeyDown(KeyCode.Alpha5)) ChangeBuildingItem(4);
		if (Input.GetMouseButtonDown(1)) RotateGhostObject();
		
		if (buildState == "Build")
		{
			ReplaceGhostObject();
			
			if (Input.GetMouseButtonDown(0))
			{
				buildSelectedItem();
			}
		}
		else if (buildState == "Remove")
		{
			
		}
	}
	
	void RotateGhostObject()
	{
		float Yrot = GhostObject.transform.eulerAngles.y + 90.0f;
		GhostObject.transform.eulerAngles = new Vector3 (0, Yrot, 0);
	}
	
	void ReplaceGhostObject()
	{
		ray = Camera.main.ScreenPointToRay(Input.mousePosition);
		if (Physics.Raycast(ray, out hit, 1000,mask))
		{
			GhostObject.transform.position = new Vector3((float)Mathf.RoundToInt(hit.point.x) , (float)Mathf.RoundToInt(hit.point.y) , (float)Mathf.RoundToInt(hit.point.z));
		}
	}
	
	void ChangeBuildingItem (int nr)
	{
		print ("Change Item: " + nr);
		BuildItemNr = nr;
		foreach (Transform item in GhostObject.transform) {
			Destroy(item.gameObject);
		}
		
		GameObject tmp = Instantiate(BuildItems[nr], new Vector3(0,0,0) , Quaternion.identity) as GameObject;
		tmp.transform.parent = GhostObject.transform;
		tmp.transform.localPosition = Vector3.zero;
		Destroy(tmp.GetComponent<BoxCollider>());
	}
	
	void buildSelectedItem ()
	{
		GameObject tmp = Instantiate(BuildItems[BuildItemNr], new Vector3(0,0,0) , Quaternion.identity) as GameObject;
		tmp.transform.parent = GhostObject.transform;
		tmp.transform.localPosition = Vector3.zero;
		tmp.transform.parent = null;
		tmp.transform.eulerAngles = new Vector3(GhostObject.transform.eulerAngles.x , GhostObject.transform.eulerAngles.y +270 , GhostObject.transform.eulerAngles.z);
	}
}