- Home /
Object slows down when moving to a NavPoint, speed is not constant
The update position code:
private void updatePos() { monsterPos = monster.transform.position;
if (rotateTowards != null) { rotateTowards.objectToRotate = monster.transform;
rotateTowards.target = nextNavPoint.transform; }
dir = nextNavPoint.transform.position - monsterPos;
monster.transform.Translate(dir speed Time.deltaTime, Space.World); }
I guess there is something on this line I need to change:
monster.transform.Translate(dir * speed * Time.deltaTime, Space.World);
Or this line:
dir = nextNavPoint.transform.position - monsterPos;
I am unsure which line I need to change/update, and I don't know what needs to be changed for the speed to be constant. I guess it has something to do with the;
dir * speed * Time.deltaTime, when
diris less than
Vector3(1, 1, 1)
Any help would be appricated. :)
Answer by hoy_smallfry · May 14, 2013 at 05:37 PM
The closer you are getting to the target, your direction variable dir
is getting closer and closer to zero vector (0, 0, 0). This will happen because the intent is to make monsterPos
equal to nextNavPoint.transform.position
; the closer monsterPos
gets to being equal to nextNavPoint.transform.position
, the closer dir
is equal to nextNavPoint.transform.position - nextNavPoint.transform.position
, which is zero vector. Because this increasingly smaller dir
value is being used to caculate your translation, your velocity, which is "direction * speed", slows down.
The solution is to normalize your direction vector to a unit vector with Vector3.Normalize() before you use it to translate. Normalizing will keep your vector at unit size (magnitude of 1) always, no matter what magnitude dir
originally was. Though, the movement will be rigid and constant this way.
[1]: http://en.wikipedia.org/wiki/Magnitude_(mathematics)#Euclidean_vectors
Adding dir.Normalize(); before monster.transform.Translate(dir speed Time.deltaTime, Space.World); solved the problem. Thank you so very much for the quick reply. :)
Your answer
Follow this Question
Related Questions
wired calculation I don't get it 30-30 = 1.907349E-06 2 Answers
Movement and animation 1 Answer
Prefab Position 2 Answers
Angle Between vectors in Navigation Mesh 1 Answer
Moving an object along a circular path 3 Answers