- Home /
2D Sprite Rotation
Hello.
I have researched this a lot and tried different suggestions but I can't seem to make it work.
I am making a 2D game and I have an Enemy patrolling via Waypoints.
He seems to move to each Waypoint nicely and even loop back.
But he rotates wrong. I need him to face the next Waypoint and it seems that I have achieved that, but when he starts moving, he moves in a spherical kinda way to get there and not in a straight line.
Any help is appreciated, here's the code.
 using UnityEngine;
 using System.Collections;
 
 public class EnemyPatrol : MonoBehaviour
 {
     public Transform[] waypoints;           
     public float patrolSpeed = 3;     
     bool loop = true;     
     bool goingBack = false;
     public float pauseDuration = 0;
     public float smooth = 5;
     
     private float curTime;
     private int currentWaypoint = 0;
 
     void  Start ()
     {
         
     }
     
     void  Update ()
     {
         if (currentWaypoint == 0)
             goingBack = false;
         
         if (currentWaypoint < waypoints.Length && goingBack == false) 
             Patrol ();
         else  
             if (loop) 
                 PatrolBack ();
         }
 
 
     void  Patrol ()
     {                
         Vector3 target = waypoints [currentWaypoint].position;
         Vector3 moveDirection = target - transform.position;
         print ("Move Direction: " + moveDirection);
             
         if (moveDirection.magnitude < 0.5f) {
 
             if (curTime == 0)
                 curTime = Time.time;
 
             if ((Time.time - curTime) >= pauseDuration) {
                 currentWaypoint++;
                 curTime = 0;
             }
 
         } else 
         {       
             float angle = (Mathf.Atan2(moveDirection.y, moveDirection.x) * Mathf.Rad2Deg) + 90;
             Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
             transform.rotation = Quaternion.Lerp(transform.rotation, q, Time.deltaTime * smooth);
             print("Rotation: " + angle);
 
             transform.Translate (moveDirection.normalized * patrolSpeed * Time.deltaTime);
 
         }    
     }
     
     void  PatrolBack ()
     {
         goingBack = true;
         Vector3 target = waypoints [currentWaypoint-1].position;
         Vector3 moveDirection = target - transform.position;
         
         if (moveDirection.magnitude < 0.5f) {
             
             if (curTime == 0)
                 curTime = Time.time; 
 
             if ((Time.time - curTime) >= pauseDuration) {
                 currentWaypoint--;
                 curTime = 0;
             }
 
         } else 
         {       
             float angle = (Mathf.Atan2(moveDirection.y, moveDirection.x) * Mathf.Rad2Deg) + 90;
             Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
             transform.rotation = Quaternion.Lerp(transform.rotation, q, Time.deltaTime * smooth);
 
             transform.Translate (moveDirection.normalized * patrolSpeed * Time.deltaTime);
         }    
     }
 }
               Comment
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                