private void LimitSpeed() { Vector3 vel = _rigid.velocity; float relativeRight = Vector3.Dot(vel, transform.right); relativeRight = Mathf.Sign(relativeRight) * Mathf.Min(Mathf.Abs(relativeRight), _maxSpeed.x); float relativeUp = Vector3.Dot(vel, transform.up); relativeUp = Mathf.Sign(relativeUp) * Mathf.Min(Mathf.Abs(relativeUp), _maxSpeed.y); float relativeForward = Vector3.Dot(vel, transform.forward); relativeForward = Mathf.Sign(relativeForward) * Mathf.Min(Mathf.Abs(relativeForward), _maxSpeed.z); vel = new Vector3(relativeRight, relativeUp, relativeForward); DebugText.ShowVector("relative velocity", vel); vel = transform.TransformVector(vel); _rigid.velocity = vel; }