Click to Move for RTS

I’ve been scratching my head and trying to research the best ways to do this and watching examples on YouTube, but I haven’t come across something that does what I need, close but I’m struggling with how to calculate distance between my transform and my destination transform. I think I’m close, but my distance value goes up instead of down to 0.

In short, I want to click to move to a destination, toggle on the thrusters on my ship and when I reach my destination toggle off the thrusters. So I need to figure out the distance between the click and the current position as the ship is moving.

Here is the C# code: pardon the mess, I’ve been trying various ways to do it.

using UnityEngine;
using System.Collections;

public class ClickToMoveAttack : MonoBehaviour {

    public GameObject unit;
    public float speed;
    public float range;
    public Vector3 orderedPosition;
    public float moveDistance;
    float moveDistanceRemain;
    bool isMoving;

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButton(1))
        {
            // Locate where player clicked
            locatePosition();

         }

         // Move player to position
         moveToPosition();


        inRange();
        Debug.Log(inRange());

        
	}

    void locatePosition()
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if(Physics.Raycast(ray,out hit,1000)){
            orderedPosition = new Vector3(hit.point.x, hit.point.y, hit.point.z);
   
            Debug.Log("Ordered Position: " +orderedPosition.ToString());
            moveDistance = hit.distance;
            Debug.Log("Distance to destination: " + moveDistance);
        }
    }

    bool inRange()
    {
        if (moveDistance <= 0)
        {
            return true;
        }
        else
        {
            if (Vector3.Distance(orderedPosition, transform.position) > 0)
            {
                moveDistance = Vector3.Distance(orderedPosition, transform.position);
            }
            return false;
        }
    }

    void moveToPosition()
    {   
        //Rotate to face direction of move order
        Quaternion newRotation = Quaternion.LookRotation(orderedPosition - transform.position);

        newRotation.x = 0f;
        newRotation.z = 0f;

        transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10);

        //Get moving already will you!?  Engage thrusters

        //Here we will pass destination in to SpaceshipController via a toggle based on distance. 

         
        if (!inRange())
        {
            Debug.Log("Engaging Thrusters");
            unit.GetComponent<SpaceshipController>().engageThrusters = true;
            isMoving = true;
            
        }
        else
        {
            Debug.Log("Disengaging Thrusters");
            unit.GetComponent<SpaceshipController>().engageThrusters = false;
            isMoving = false;
        }

        //TODO: Need to figure out isSelected logic, so only the ships we order to move will move. 
        
    } 

        //TODO: Add a subroutine here to detect and engage enemies in range. 
}

I’ve been working on this while I’ve
been waiting for the post to be
approved and I came up with this,
seems to be a little closer: If anyone
has a better way, please share!

using UnityEngine;
using System.Collections;

public class ClickToMoveAttack : MonoBehaviour {

    public GameObject unit;
    public float speed;
    public float range;
    public Vector3 orderedPosition;
    public float moveDistance;
    bool isMoving;


	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButton(1))
        {
            // Locate where player clicked
            locatePosition();

          
           
        }

        // Move player to position
        moveToPosition();

        
        Debug.Log(inRange());

        
	}

    void locatePosition()
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if(Physics.Raycast(ray,out hit,1000)){
            orderedPosition = new Vector3(hit.point.x, hit.point.y, hit.point.z);
   
            Debug.Log("Ordered Position: " +orderedPosition.ToString());
            moveDistance = hit.distance;
            Debug.Log("Distance to destination: " + moveDistance);
        }
    }
    
    bool inRange()
    {
        if(Vector3.Distance(orderedPosition, transform.position) <= range){
            return true;
        }
        else
        {
        
           return false;
        }
    }
    
    void moveToPosition()
    {   
        //Rotate to face direction of move order
        Quaternion newRotation = Quaternion.LookRotation(orderedPosition - transform.position);

        newRotation.x = 0f;
        newRotation.z = 0f;

        transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10);

        //Get moving already will you!?  Engage thrusters

        //Here we will pass destination in to SpaceshipController via a toggle based on distance. 
        inRange();

         
        if (!inRange())
        {
            if (!isMoving)
            {
                Debug.Log("Engaging Thrusters");
                unit.GetComponent<SpaceshipController>().engageThrusters = true;
                isMoving = true;
            }
            
        }
        else
        {
            if (isMoving && inRange()) {
            Debug.Log("Disengaging Thrusters");
            unit.GetComponent<SpaceshipController>().engageThrusters = false;
            isMoving = false;
            }
        }

        //TODO: Need to figure out isSelected logic, so only the ships we order to move will move. 
        
    } 

        //TODO: Add a subroutine here to detect and engage enemies in range. 
}

Try looking at Vector3.Distance(pos1, pos2)

script reference