- Home /
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)
Answer by StephanK · Apr 02, 2011 at 08:32 AM
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.
Just don't transform it to world space before using move.
Your answer
Follow this Question
Related Questions
MMORPG Rotate Character 1 Answer
Rotate camera to character angle 0 Answers
Turning torso of character with mouse 0 Answers
Clamping the Camera, according to the player ? 1 Answer
character and Camera rotate 2 Answers