1
\$\begingroup\$

I cant get my rigidbody2d game object to move to where i click the mouse. The first click works. The object travels to the mouse click and stops. But the second time (or the third time) i click the object travels in som direction but its not quite correct and it never reaches the target! What am i not getting right?

   if (Input.GetMouseButtonDown (0)) {
             var mouseClick = Input.mousePosition;
             mouseClick.z = player.transform.position.z - Camera.main.transform.position.z;
             target = Camera.main.ScreenToWorldPoint (mouseClick);
             rotateToTarget = false;
             travelToTarget = true;
             print ("NEW TARGET: " + target);
             Debug.DrawLine (Camera.main.transform.position, target, Color.red, 10f);
      }

      if (rotateToTarget == false && travelToTarget == true) {

             var distanceToTarget = Vector3.Distance (player.transform.position, target);


             if (distanceToTarget > 2) {

                print ("Distance: " + distanceToTarget);

                target.z = 0;

            player.rigidbody2D.AddForce (target * travelSpeed);

             } else {

                travelToTarget = false;
                print ("travelling COMPLETE");
             }        
      }
\$\endgroup\$
3
  • \$\begingroup\$ It looks ok at first glance. The debugDrawLine looks correct? What is the output on the second click? \$\endgroup\$ Commented Feb 9, 2014 at 22:29
  • \$\begingroup\$ The output is always correct. But the movement is not. :P \$\endgroup\$ Commented Feb 9, 2014 at 22:49
  • \$\begingroup\$ I notice you set target.z to 0 after drawing the debugLine, perhaps that could cause something. I suggest you print out the values and go step by step with pen and paper to make sure all the variables are what you'd expect. \$\endgroup\$ Commented Feb 9, 2014 at 23:13

1 Answer 1

2
\$\begingroup\$

This is the error:

player.rigidbody2D.AddForce (target * travelSpeed);

You are ignoring the players current position, which is why it only works once because the initial position is (0,0,0).

Use (target - player.transform.position) * travelSpeed instead.

\$\endgroup\$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.