Так можем таскать превив модельки за мышкой.
Ray _ray;
RaycastHit _hit;
bool _previw=false;
bool _instans=false;
void Update()
{
if(GUI.Button(new Rect(10, 70, 50, 30), "Click me"))
{
_previw=!_previw;
}
if(_previw)
{
ray=Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(_ray, out _hit, Mathf.Infinity, 100))
{
if(!_instans)
{
if (_hit.collider.tag == "Floor")
{
Instantiate(_tower_Prefab,_hit.point,Quaternion.identity);
_instans=true;
}
}
}
transform.position=_hit.point;
}
}
Так расставить кубики по узлам сетки
Vector3 [] _point_List=new Vector3[30]
float _x=0;
float _z=0;
float _j=0;
void Start()
{
for(int i=0;i<30;i++)
{
_point_List[i]=new Vector 3(_x,0,_z)
GameObject _waypoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
_waypoint.transform.position=_point_List[i];
_waypoint.tag="Empty";
_x=i+100f;
_j++;
if(_j%5==0f)
{
_z=i+50f;
_x=0;
_j=0;
}
}
}
Так реагируем на приближение к обьекту
void OnCollisionEnter(Collision collision)
{
public Transfotm _tower_Prefab;
if(collision.gameObject.tag=="Empty")
{
renderer.material.color=Color.green;
if (Input.GetButtonDown("Fire1"))
{
Gameobject _waypointOn=collision.gameObject;
Instantiate(_tower_Prefab,_waypointOn.transform.position,Quaternion.identity);
Destroy(_waypointOn);
}
}
}
В общих чертах логика такая.