x


Sidescroller Turning

I've edited this WoW Camera Script to fit my character properly, but when he turns around to run left, he turns around, but he moves to the right still. Could anyone lend a hand? Here's the script.

// Movement Variables
private var jumpSpeed:float = 9.0; 
private var gravity:float = 100.0; 
private var rotateSpeed:float = 250.0; 
private var grounded:boolean = false; 
private var moveDirection:Vector3 = Vector3.zero; 
private var isWalking:boolean = true; 
private var moveStatus:String = "idle"; 
private var xSpeed = 250.0; 
private var ySpeed = 120.0; 
private var yMinLimit = -40; 
private var yMaxLimit = 80; 
private var x = 0.0; 
private var y = 0.0; 

static var walkSpeed:float = 15.0; 
static var isRunning:boolean = false;
static var isMoving:boolean = false;

function Start ()
{
   // Set all animations to loop
   animation.wrapMode = WrapMode.Loop;
   animation.Stop();
}

// -------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------------- UPDATE ---------------------------------------
// -------------------------------------------------------------------------------------------------------------

function Update () {
   if(grounded) { 
        moveDirection = new Vector3(0,0,Input.GetAxis("Horizontal")); 
        if(Input.GetAxis("Horizontal")) { 
            moveDirection *= .7; 
            transform.LookAt(transform.position + moveDirection); 

        } 
        moveDirection = transform.TransformDirection(moveDirection); 
        moveDirection *= walkSpeed;
        moveStatus = "idle"; 
        if(moveDirection != Vector3.zero) {
            animation.CrossFade("run",0.2);
            isMoving = true;
        } else {
            isMoving = false;
            animation.CrossFade("Take 001",0.2);
        }
    }                           
    //////////

    if(Input.GetKey("q")) {
        isRunning = true;
        walkSpeed = 50;
    }else{
        isRunning = false;
        walkSpeed = 30;
    }
    //////////

    moveDirection.y -= gravity * Time.deltaTime; 
    var controller:CharacterController = GetComponent(CharacterController); 
    var flags = controller.Move(moveDirection * Time.deltaTime); 
    grounded = (flags & CollisionFlags.Below) != 0; 
    };
    static function ClampAngle (angle : float, min : float, max : float) { 
   if (angle < -360) 
      angle += 360; 
   if (angle > 360) 
      angle -= 360; 
   return Mathf.Clamp (angle, min, max); 
} 

@script RequireComponent(CharacterController)
more ▼

asked Apr 02 '11 at 03:29 AM

Xatoku gravatar image

Xatoku
152 73 81 88

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

I guess your problem is that controller.Move expects a velocity in local coordinates and you transformed it to world space earlier with transform.TransformDirection.

more ▼

answered Apr 02 '11 at 08:32 AM

StephanK gravatar image

StephanK
6k 39 53 93

So how can I fix this?

Apr 02 '11 at 02:12 PM Xatoku

Just don't transform it to world space before using move.

Apr 04 '11 at 09:07 AM StephanK
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3001
x1044
x724
x70
x27

asked: Apr 02 '11 at 03:29 AM

Seen: 679 times

Last Updated: Apr 02 '11 at 03:29 AM