Simple DASH Mechanic in Unity
ฝัง
- เผยแพร่เมื่อ 25 ธ.ค. 2024
- You can setup a player dash in like 7 lines of code. It's super easy.
All you need to do is:
1. Determine if you can Dash
2. Increase Player move speed for a set duration
3. Set an optional cooldown to dash again
4. Allow the player to dash again
#unity #movement #tutorial
I love the fact you explain what every line does at the end. This makes it clear to me as a total noob exactly what line does what so that I can implement those lines in other methods I'm making. Thank you!
Love the simplicity, only 7 lines of code 🤯 like Bmo says, it’s fun to go fast 💨
Glad you are back!
Alright, subscribing. Your tutorials are very chill. Thanks so much!
Sometimes I over-complicate things, so when I see a guide like this it helps me to comprehend other ways I can accomplish the same thing.
oh my this is so.... love it dude
Yasssss bmo is back 👏 👏 👏
Don't mind but CAN I ASK THAT WHY ARE YOU NOT AN ANGEL, BRO KNOWS EVERTHING. THX SOSOSOSOSOSOSOSOSOSOS Much
This methods seems hard to to implement in the new input system, do you have any suggestions?
If you still want to know
Use public InputActionReference actionKey;
And then in the if statement you’ll do this
If(actionKey.action.triggered)
This will act like KeyCode Key, but you will be able to select the input action you created
Lovely ❤👍
We all know it should've been the red knight in the thumbnail
Hey so I tried adapting the tutorial without the shooting mechanic. I used the movement script and it worked but when I tried to implement the dash my character didn’t move anymore and the dash didn’t work either. Unity also didn’t recognise the KeyCode Term. Any help would be appreciated! :]
What input system are you using? The new input system doesn't use the .keycode fuction.
Idk but I have notice that if you collide with something like enemies of walls when you dash the player rotates like crazy how do I fix that? And hey any Idea how to put a cooldown GUI for this?
you probably figured this out but im pretty sure you have to check “freeze rotation” in the rigidbody settings ?
Can you use character controller?
The player isn't stopping once the duration is over for me, just continuing to slide.
My dash speed variable roesnt make me go faster, its the only thing that doesnt work, no matter what i do it stays constant, i coppied everythign down exactly from this video cause i was so frustrated and it still dont work, maybe its clashign with my other movement code but idk
PLEASE HELP ME BMo IM GOING INSANE TRYING TO FIX THIS BUT BOTHING WORKS
Have you gotten it fixed yet
@@Unknown-nv9so nope. Gave up on fixing that nd decided to do sum else, sorry
I solved it with changing my character movement function to function rb.MovePosition and dashing with increasing value of the speed.
Like
rb.MovePosition(rb.position+direction.normalized * speed * Time.fixedDeltaTime); // when player is dashing, speed = dashSpeed, after dash time ends speed = defaultSpeed
Also it can be done with rb. velocity for both but in my case i did not solve that in a way that gives player little control while dashing. MovePosition method is easier, just increase the speed while dash time is not ended
@@Unknown-nv9so I solved it with changing my character movement function to function rb.MovePosition and dashing with increasing value of the speed.
Like
rb.MovePosition(rb.position+direction.normalized * speed * Time.fixedDeltaTime); // when player is dashing, speed = dashSpeed, after dash time ends speed = defaultSpeed
Also it can be done with rb. velocity for both but in my case i did not solve that in a way that gives player little control while dashing. MovePosition method is easier, just increase the speed while dash time is not ended
is having a coroutine in update not seen as a bad idea?
Why would it be?
The rb isnt speeding up Ive been trying to fix it but i have no idea what is wrong please help.
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using Unity.VisualScripting;
using UnityEditor.Callbacks;
using UnityEngine;
public class MovmentScript : MonoBehaviour
{
[SerializeField] private TrailRenderer tr;
[SerializeField] public Rigidbody2D rb;
[SerializeField] float movespeed = 5f;
Vector2 moveDirection;
Vector2 mousePosition;
[SerializeField] float dashSpeed = 10f;
[SerializeField] float dashDuration = 1f;
[SerializeField] float dashCooldown = 1f;
bool isDashing = false;
// Update is called once per frame
void Update()
{
if (isDashing == true)
{
return;
}
float verticalInput = Input.GetAxis("Vertical");
float horizontalInput = Input.GetAxis("Horizontal");
moveDirection = new Vector2 (horizontalInput, verticalInput).normalized;
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetKeyDown(KeyCode.LeftShift))
{
StartCoroutine(Dash());
}
}
private void FixedUpdate()
{
rb.velocity = new Vector2(moveDirection.x * movespeed, moveDirection.y*movespeed);
Vector2 aimDirection = mousePosition - rb.position;
float aimAngle = Mathf.Atan2(aimDirection.y, aimDirection.x)*Mathf.Rad2Deg -90f;
rb.rotation = aimAngle;
}
private IEnumerator Dash()
{
isDashing =true;
rb.velocity = new Vector2(moveDirection.x * dashSpeed , moveDirection.y * dashSpeed );
yield return new WaitForSeconds(dashDuration);
isDashing = false;
Debug.Log ("speed applied");
}
}
When i press the shift key the only thing that happens it the rb moves in the right direction but will stay the same as the movespeed no matter how much i increase the dashspeed.
It works fine for me, but I can't run the dash diagonally when I press the up-left and down-right keys, but it works when I press up-right and down-left. Does anyone know why this happens?
this is happening to me too, but only with up left and only on the arrow keys, works fine for wasd
"PromoSM" 😉