- Home /
character movement at +/- 90° not working as expected
Hi,
I have a problem with transform.transformDirection with regards to character movement and movement speed.
I use the following code snippet to calculate velocitychange and then I alter the characters velocity with AddForce.
Vector3 relativeVelocity = transform.TransformDirection (InputVector);
if (InputVector.z > 0) {
if (InputVector.x != 0) {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunForwardStrafeSpeed :WalkForwardStrafeSpeed;
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunForwardStrafeSpeed :WalkForwardStrafeSpeed;
} else {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunForwardSpeed :WalkForwardSpeed;
}
} else if (InputVector.z < 0) {
if (InputVector.x != 0) {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunBackStrafeSpeed : WalkBackStrafeSpeed;
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunBackStrafeSpeed : WalkBackStrafeSpeed;
} else {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunBackSpeed : WalkBackSpeed;
}
} else {
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunStrafeSpeed : WalkStrafeSpeed;
}
//print (relativeVelocity);
Vector3 currentVelocity = rb.velocity - groundVelocity;
Vector3 velocityChange = relativeVelocity - currentVelocity;
//print ("cr"+velocityChange+"=rv"+relativeVelocity+"-rb"+rb.velocity+"-"+groundVelocity);
velocityChange.x = Mathf.Clamp (velocityChange.x, -MaxVelocityChange, +MaxVelocityChange);
velocityChange.y = 0;
velocityChange.z = Mathf.Clamp (velocityChange.z, -MaxVelocityChange, +MaxVelocityChange);
return velocityChange;
The code seems flawless, but pure W, A, S or D movements at +/-90° makes the character crawl at a speed of 0.1f instead of 8f. Diagonal movement at +/-90° works perfectly, and all movement works perfectly at +/- 180°.
If rotating the character to +/- 45° or +/-135° and moving with pure W, A, S or D, then the speed towards +/- 180° is faster than the speed towards +/-90°.
Any help or suggestions would be appreciated.
Answer by BlazingOculus · Dec 27, 2017 at 11:00 AM
OK, the code was not as flawless as I thought.
I didn't notice that the relativeVelocity's x and z axis gradually swap when rotating the character.
I altered the following snippet, of the above code, to: ()
if (InputVector.z > 0) {
if (InputVector.x != 0) {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunForwardStrafeSpeed : WalkForwardStrafeSpeed;
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunForwardStrafeSpeed : WalkForwardStrafeSpeed;
} else {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunForwardSpeed : WalkForwardSpeed;
(edit)relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunForwardSpeed : WalkForwardSpeed;(edit)
print (relativeVelocity);
}
} else if (InputVector.z < 0) {
if (InputVector.x != 0) {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunBackStrafeSpeed : WalkBackStrafeSpeed;
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunBackStrafeSpeed : WalkBackStrafeSpeed;
} else {
relativeVelocity.z *= (Input.GetButton ("Sprint")) ? RunBackSpeed : WalkBackSpeed;
(edit)relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunBackSpeed : WalkBackSpeed;(edit)
}
} else {
relativeVelocity.x *= (Input.GetButton ("Sprint")) ? RunStrafeSpeed : WalkStrafeSpeed;
(edit)relativeVelocity.y *= (Input.GetButton ("Sprint")) ? RunStrafeSpeed : WalkStrafeSpeed;(edit)
}
Your answer
Follow this Question
Related Questions
Transform position of an object at particular angle/direction 3 Answers
tranform.TransformDirection not effecting spawned object 2 Answers
How to drag and drop a instantiate prefab on my mobile game 3D using touchs! 0 Answers
Movement Script Help 1 Answer
How do I get GameObjects to look at me? 2 Answers