var waypoints : Transform[]; var waypointRadius : float = 1.5; var damping : float = 0.1; var speed : float = 2.0; private var targetHeading : Vector3; private var currentHeading : Vector3; private var targetwaypoint : int; // Use this for initialization function Start() { currentHeading = transform.forward; targetwaypoint = 0; } // calculates a new heading function FixedUpdate() { targetHeading = waypoints[targetwaypoint].position - transform.position; currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime); } // moves us along current heading function Update(){ transform.position +=currentHeading * Time.deltaTime * speed; if(Vector3.Distance(transform.position,waypoints[targetwaypoint].position)<=waypointRadius) { targetwaypoint++; if(targetwaypoint>=waypoints.Length) { targetwaypoint = 0; } } } // draws red line from waypoint to waypoint function OnDrawGizmos(){ Gizmos.color = Color.red; for(var i : int = 0; i< waypoints.Length;i++) { var pos : Vector3 = waypoints[i].position; if(i>0) { var prev : Vector3 = waypoints[i-1].position; Gizmos.DrawLine(prev,pos); } } }