- Home /
Velocity with (unit vector) * (value) problem
I have a problem when trying to normalize a vector to use its direction along with the speed I want the object to have. Something like:
u = ||u|| * û
With u being the vector velocity, ||u|| the speed (magnitude of the vector) and û the unit vector that defines the direction I want the object to take.
Another thing I do is find the space between two objects and normalize the vector to find its direction (û), to make the first to move towards the other. This is where I think I'm probably making a mistake.
When I do this in Unity (using Javascript), and then test it I find that everything is alright until I get close to the place where the object spawns. The first object (bullet) reduces its speed as if the previously normalized vector were changing its lenght, therefore reducing its magnitude (speed). So here's part of the code:
var bulletclone : Transform;
bulletclone = Instantiate(halbullet,attackcoord.position,Quaternion.identity);
var dir = ((player.position - bulletclone.position).normalized);
bulletclone.rigidbody2D.velocity = dir*5;
The last part of the code is like the first equation I quoted. I hope you can help me with this problem since I can't see what I'm doing wrong. Excuse my bad english (just in case) since i'm not a native english speaker.
Your math looks okay to me. Any chance the bullet is slowing down due to drag?
Well I'm pretty new to Unity so i'm not used at all with some terms. I've checked the rigidbody2D of the bullet in the inspector, and I have the linear drag and angular drag set to 0 if that's what you mean.
The bullet travels with a constant speed, so there isn't any kind of deceleration in the movement. The problem comes with the next bullets that spawn, as if it seems that the speed of the bullet is deter$$anonymous$$ed by the distance of the player and the bullet (being closer = slower speed; farther = faster speed).
Answer by robertbu · Aug 12, 2014 at 12:43 AM
I had a similar problems a couple of days ago in a 2D app. Make sure the 'z' for both 'player.position' and 'bulletclone.position' are the same. If the 'z' is not the same, shorter vectors will have a larger 'z' component compared to the same direction and a longer distance. Rigidbody2D.velocity only uses x and y, so the 'z' is discarded. And this fits exactly with what you see.
That worked! I forgot I once saw, messing with 3D settings, that my player was in a different place in Z. Thanks for the help!
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Physics2D AddForce Direction Vector Issue 1 Answer
Why doesn't my object move left? 1 Answer
Rigidbody Local Velocity 1 Answer
Converting direction to Vector2 2 Answers