- Home /
Question by
Jurassic · Jan 31, 2014 at 02:40 AM ·
c#movementtransformtransformdirection
Push the player forward C#
I'm having some trouble understanding how the 3d movement works in Unity.
Basically I want the player to be pushed forward and unable to turn and ignore gravity for a few seconds after pressing a key (F is used in the code I pasted below). I've been tinkering at this bit of code for over a day and I can't figure out why it isn't doing what I want it to. I've been removing and adding and commenting out a lot of lines so sorry if this is a bit difficult to piece together. I can elaborate further if necessary.
void Update ()
{
//Hoverboard functionality
if(isRidingBoard){
if(ridetimer<maxridetime){
ridetimer++;
}
else{
isRidingBoard = false;
ridetimer = 0;
}
}
//Main Movement script
if(playerInv.isCrafting()==false) {
//Calculate player's velocity
Vector3 horizontalVelocity = new Vector3(controller.velocity.x, 0, controller.velocity.z);
float horizontalSpeed = horizontalVelocity.magnitude;
//Rotate the player in the direction he's moving
if(horizontalSpeed>0){
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(controller.velocity), Time.deltaTime * rotationDamp);
}
//Hold right click to turn character
if(Input.GetMouseButton(1)){
transform.rotation=Quaternion.LookRotation(new Vector3(transform.position.x-PCcamera.transform.position.x,0,transform.position.z-PCcamera.transform.position.z));
}
//Basic WASD movement
if (controller.isGrounded &&!isRidingBoard) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButtonDown("Jump") && !isRidingBoard)
moveDirection.y = jumpSpeed;
}
//Ride the hoverboard
if(Input.GetKeyDown(KeyCode.F) && !isRidingBoard){
isRidingBoard = true;
}
//Apply gravity to the player
moveDirection.y -= gravity * Time.deltaTime;
//Lock the player's rotation on the X and Z axis
transform.rotation = Quaternion.Euler(lockPos, transform.rotation.eulerAngles.y, lockPos);
//Move the player
if(!isRidingBoard){
controller.Move(moveDirection * Time.deltaTime);
}
if(isRidingBoard){
if(ridetimer<maxridetime){
hoverBoardRide(moveDirection);
}
}
}
}
void hoverBoardRide(Vector3 mDirection){
//mDirection = transform.TransformDirection(mDirection);
//mDirection *= speed;
controller.Move(mDirection * Time.deltaTime);
}
Comment