- Home /
Question by
nwott1 · Feb 01, 2021 at 05:27 PM ·
playerplayer movementcharacter controllerdash
Player dashes faster in build than editor
I have a script on my player that has a dash feature. The player dashes further in the build than the Unity editor. What am I doing wrong here?
void Update()
{
// Change health text
healthText.text = "Health: " + health.ToString();
// Stores mouse movement data
float movementY = Input.GetAxis("Mouse Y") * mouseSens * Time.deltaTime;
float movementX = Input.GetAxis("Mouse X") * mouseSens * Time.deltaTime;
// Restricts player looking up and down
xRotation -= movementY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
// Rotates player based on mouse movement
cam.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerTransform.Rotate(Vector3.up * movementX);
// Checks if player is grounded
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
// Checks for WASD movement
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
// Sets move direction
Vector3 move = transform.right * x + transform.forward * z;
// Moves player
controller.Move(move * speed * Time.deltaTime);
// Jump
if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2 * gravity);
}
// Dash
// Dash timer
if (timeBtwDash <= 0 && dashAvailable == false)
{
dashAvailable = true;
}
else if (timeBtwDash > 0)
{
timeBtwDash -= Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftShift) && dashAvailable == true)
{
currentDashTime = 0.0f;
}
if (currentDashTime < maxDashTime)
{
moveDirection = transform.forward * dashDistance;
currentDashTime += dashStoppingSpeed;
dashAvailable = false;
timeBtwDash = startTimeBtwDash;
}
else
{
moveDirection = Vector3.zero;
}
controller.Move(moveDirection * dashSpeed * Time.deltaTime);
// Applies gravity to player
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
if (canAttack && Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, attackRange))
{
if(hit.collider.CompareTag("Melee") || hit.collider.CompareTag("Magic"))
{
Debug.Log("attack landed");
hit.collider.gameObject.GetComponent<Mugger>().TakeDamage(attackDamage);
}
}
}
}
Comment
Answer by Toastbyte · Feb 01, 2021 at 06:00 PM
physics should always be handled in FixedUpdate(), not Update().
Try changing it and see what happens.
I tried two things. I first put all of the movement code into fixed update, but that made it so that the player dashes even further in both the build and the editor. The second thing I did was put all the movement code, but the dash timer into fixed update, but that has the same result as the initial result.