- Home /
 
smooth movement through waypoints
Hi I have been trying to create a horse racing AI. The horses move between waypoints along a path. The issue is that when the horses are seen through a moving camera, the tend to stop at each waypoint for an instant because the speed is reset at each update and the horses are thus left behind a little each time in comparison to camera view.I am using Vector3.MoveTowards function to move the horse between waypoints.
Could anyone help please.
heres the dropbox link to the demo. u can see the problem for yourself.
https://www.dropbox.com/s/gmm4d9na163vofy/demo%20horse_Data.zip?dl=0
Answer by Socapex · Jun 21, 2015 at 12:37 PM
I am not sure I understand, but I guess you could detect when your close to the waypoint, and set the next one before you've actually arrived? maybe? :)
heres the code
using UnityEngine; using System.Collections;
public class PathFollowing : $$anonymous$$onoBehaviour {
 public Transform lane;
 public Transform[] path;
 //public Transform end;
 public float speed=2.0f;
 public float reachDist=1.0f;
 public int currentPoint=0;
 private bool stop=false;
 private Animator anim;
 private float time=0.0f;
 private float distance;
 private float distanceTravelled;
 private Vector3 lastPosition;
 //private Rigidbody horse;
 // Use this for initialization
 void Start () {
     transform.position = lane.position;
     anim=GetComponent<Animator>();
 }
 
 // Update is called once per frame
 void Update (){
     //distanceTravelled += Vector3.Distance (transform.position, lastPosition);
     //lastPosition = transform.position;
     //Debug.Log(distanceTravelled);
 
                  // if (!stop) {
         time+=Time.deltaTime;
         Debug.Log(time);
                     Run ();
             
             } else {
                 
                 Stop();
             }
     //Vector3 dir = path [currentPoint].position - transform.position;
 }
 void Run (){
     float rotSpeed = 20.0f;
     anim.SetBool ("runAnim",true);
     float dist = Vector3.Distance (path [currentPoint].position, transform.position);
     //horse.velocity=transform.forward*150.0f;
     transform.position = Vector3.$$anonymous$$oveTowards(transform.position,path[currentPoint].position, Time.deltaTime * speed);
     //Quaternion targetRot = Quaternion.LookRotation (path [currentPoint].position - transform.position);
     transform.rotation= Quaternion.Slerp (transform.rotation, path[currentPoint].localRotation,rotSpeed*Time.deltaTime);
         
         if (dist<=reachDist) {
             
             currentPoint++;
         }
         
         if (currentPoint >= path.Length) {
             
             
             currentPoint=0;
             stop = true;
             //Stop();
         }
     }
 void Stop(){
         anim.SetBool ("runAnim", false);
     }
 void OnDrawGizmos(){
     Gizmos.color = Color.red;
     if (path.Length > 0) {
         for (int i=0; i<path.Length; i++) {
     
             if (path [i] != null) {
                 Gizmos.DrawWireSphere(path [i].position, reachDist);
                 if(i>0){
                     Gizmos.DrawLine(path[i-1].position,path[i].position);
                     distance+= Vector3.Distance(path[i-1].position,path[i].position);
                 }
             }
         }
     }
 }
 
                  }
heres the link to the demo showing the problem
https://www.dropbox.com/s/gmm4d9na163vofy/demo%20horse_Data.zip?dl=0
Your answer
 
             Follow this Question
Related Questions
Smooth Camera/Object Movement 1 Answer
[Solved]NetWork not smooth 1 Answer
How do I make Rigidbody2D movement smoother? 0 Answers
How to incorporate Time.deltaTime into existing script 1 Answer