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.