Quick time events linked to movement

I’m trying to make a 2d game based on sport swimming. However, the way the character has to move for the purpose of the game is similar to that of a quick time event that works like this:

It uses a pattern combination of W, A, D, ^, <, >, (representing arrow keys,) in order to move.
If the player messes up the combination the character will slow down, and if they do it right, the character will continuously speed up to a maximum speed. Also, as the movement speeds up, the player will have to push the buttons faster.
The problem is that I cant seem to find a way to do this -its been a few years since I last did anything with unity- and its very important to find a way to pull this off, or find something similar that works.
This is the main gimmick behind the game as its only meant to be a simple reaction and rhythm game, with some elements to feel more competitive, like a timer for early levels and a high score system.
I’ve been trying to find a way to do this for a few hours, so if anyone has any ideas id be more than happy to hear them.
Also- if standard movement absolutely wont work, any ideas with an animation linked to a timer would also work

Hello Xene,
Could you share with us a little bit of the methods you have been trying, but didn’t work?

Update:
I’ve gotten a method to get a combination system up and running, But I still need a way to make it move properly. The code I have so far does allow you to move, but its manual, and goes in the wrong direction. what I need is for the character to move Left, increasing the speed by 1 each time the combo is completed.

using UnityEngine;
 
using System.Collections;
 

 
public class New_Combo_System : MonoBehaviour
 
{
 

 
    bool ActivateTimerToReset = false;
 
    //The more bools, the less readibility, try to stick with the essentials.
 
    //If you were to press 10 buttons in a row
 
    //having 10 booleans to check for those would be confusing
 

 
    public float currentComboTimer;
 
    public int currentComboState = 0;
 
    public float speed;                //Floating point variable to store the player's movement speed.
 

 
    private Rigidbody2D rb2d;        //Store a reference to the Rigidbody2D component required to use 2D Physics.
 
    float origTimer;
 

 
    void Start()
 
    {
 
        // Store original timer reset duration
 
        origTimer = currentComboTimer;
 
    }
 

 
    // Update is called once per frame, yeah everybody knows this
 

 
    void Update()
 
    {
 
        NewComboSystem();
 
        //Initially set to false, so the method won't start
 
        ResetComboState(ActivateTimerToReset);
 
    }
 

 
    void ResetComboState(bool resetTimer)
 
    {
 
        if (resetTimer)
 
        //if the bool that you pass to the method is true
 
        // (aka if ActivateTimerToReset is true, then the timer start
 
        {
 
            currentComboTimer -= Time.deltaTime;
 
            //If the parameter bool is set to true, a timer start, when the timer
 
            //runs out (because you don't press fast enought Z the second time)
 
            //currentComboState is set again to zero, and you need to press it twice again
 
            if (currentComboTimer <= 0)
 
            {
 
                currentComboState = 0;
 
                ActivateTimerToReset = false;
 
                currentComboTimer = origTimer;
 
            }
 
        }
 
    }
 

 
    void NewComboSystem()
 
    {
 
        if (currentComboState == 0)
 

 
        {
 
            if (Input.GetKeyDown(KeyCode.UpArrow))
 
            {
 

 
                //No need to create a comboStateUpdate()
 
                //function while you can directly
 
                //increment a variable using ++ operator
 
                currentComboState++;
 

 
                //Okay, you pressed Z once, so now the resetcombostate Function is
 
                //set to true, and the timer starts to reset the currcombostate
 
                ActivateTimerToReset = true;
 

 
                //Note that I'm to lazy to setup a switch statement
 
                //that would be WAY more readable than 3 if's in a row
 
                if (currentComboState == 1)
 
                {
 

 
                    Debug.Log("1 hit");
 
                }
 
            }
 
        }
 
            if (currentComboState == 1)
 
            {
 
                if (Input.GetKeyDown(KeyCode.LeftArrow))
 
                {
 

 
                    //No need to create a comboStateUpdate()
 
                    //function while you can directly
 
                    //increment a variable using ++ operator
 
                    currentComboState++;
 

 
                    //Okay, you pressed Z once, so now the resetcombostate Function is
 
                    //set to true, and the timer starts to reset the currcombostate
 
                    ActivateTimerToReset = true;
 

 
                    //Note that I'm to lazy to setup a switch statement
 
                    //that would be WAY more readable than 3 if's in a row
 
                    if (currentComboState == 2)
 
                    {
 

 
                        Debug.Log("2 hit");
 
                    }
 
                }
 
            }
 
        if (currentComboState == 2)
 
        {
 
            if (Input.GetKeyDown(KeyCode.RightArrow))
 
            {
 

 
                //No need to create a comboStateUpdate()
 
                //function while you can directly
 
                //increment a variable using ++ operator
 
                currentComboState++;
 

 
                //Okay, you pressed Z once, so now the resetcombostate Function is
 
                //set to true, and the timer starts to reset the currcombostate
 
                ActivateTimerToReset = true;
 

 
                //Note that I'm to lazy to setup a switch statement
 
                //that would be WAY more readable than 3 if's in a row
 
                if (currentComboState == 3)
 
                {
 

 
                    Debug.Log("WOOOOO");
 
                }
 
            }
 
        }
 
        if (currentComboState == 3)
 
        {
 

 
            {
 
                //Get and store a reference to the Rigidbody2D component so that we can access it.
 
                rb2d = GetComponent<Rigidbody2D>();
 

 
               
 
            }
 
            {
 
                //Store the current horizontal input in the float moveHorizontal.
 
                float moveHorizontal = Input.GetAxis("Horizontal");
 

 
                //Store the current vertical input in the float moveVertical.
 
                float moveVertical = Input.GetAxis("Vertical");
 

 
                //Use the two store floats to create a new Vector2 variable movement.
 
                Vector2 movement = new Vector2(moveHorizontal, moveVertical);
 

 
                //Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
 
                rb2d.AddForce(movement * speed);
 
            }
 
        }
 
        }
 
    }

This is the code I have so far, the last lines (252 - 292, I believe) are just the basic movement code for a top down 2d game.
I’ve been trying for hours now, but I cant seem to figure out a way to get it to just increase velocity automatically when the 3rd combo key is pressed. I don’t know, maybe I’m way over complicating things, but that’s why I’m turning to the Forums instead of suffering for the next few days until my deadline catches up to me. if anyone knows of a way to do what I’m trying to, that would be incredibly helpful.