Charactercontroller.move affecting rotation

so charactercontroller.simplemove moves the character in relation to it’s rotation. for example, I use simplemove to up the x axis. I rotate the character 90 degrees, and now it moves up the z axis. This is what I want.

However, I also want the character to jump; charactercontroller.move is suggested for that. it moves the character globally though, it always moves along the same axis no matter the rotation. How can I fix that?

SimpleMove and Move both expect a global direction, not local. The difference between them is that SimpleMove expects the velocity vector, while Move wants the displacement. I suspect that you’re using the example scripts - they are different: the SimpleMove example rotates with the horizontal arrows, while the Move example rotates with the mouse and moves laterally with left/right keys. If this is the case, you must create a “Frankenstein” script with parts of both - like this:

var speed : float = 6.0;
var rotSpeed : float = 90.0; // rotate at 90 degrees/second
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
private var moveDirection : Vector3 = Vector3.zero;

function Update() {
    // rotate character with horizontal keys:
    transform.Rotate(0, Input.GetAxis("Horizontal") * rotSpeed * Time.deltaTime, 0);
    var controller : CharacterController = GetComponent(CharacterController);
    if (controller.isGrounded) {
        // We are grounded, so recalculate
        // move direction directly from axes
        moveDirection = Vector3.forward * Input.GetAxis("Vertical");
        // convert direction from local to global space:
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection *= speed;
        if (Input.GetButton ("Jump")) {
            moveDirection.y = jumpSpeed;
        }
    }
    // Apply gravity
    moveDirection.y -= gravity * Time.deltaTime;
    // convert velocity to displacement and move character:
    controller.Move(moveDirection * Time.deltaTime);
}