- Home /
Controller Joystick Hold Delay Logic?
I've tried to find a good resource on how to do controller joystick hold delay time, but can't find any.
By this I mean: If the user pushes the joystick in a direction, the game will take one input of moving in that direction, then will delay for some time and go into a hold state where the game will then continually take input of moving.
This is a common thing in every game in like UIs and grid based games. I just can't seem to find a simple explanation on how to do this correctly and make it feel very smooth on a joystick axis and taking into account all directions.
Thank you.
Answer by jackmw94 · Nov 12, 2020 at 10:05 AM
Have a look through this little sample:
Use it as an example to learn from, don't try shoehorn it in if you don't get what's going on! But do ask questions if you have any :)
[SerializeField] private float holdDelay = 0.7f;
[SerializeField] private float deadZone = 0.1f;
float holdStartTime = float.MaxValue;
// If we set the holdStartTime to greater than our current time it's because we weren't holding
// Saves us using an extra bool called 'wasHolding' but you could also do that if it's easier to read!
private bool WasHolding => holdStartTime < Time.time;
private void Update()
{
// rename these two or replace with whatever you're getting your input from
float joyStickX = Input.GetAxis("<JoystickX>");
float joyStickY = Input.GetAxis("<JoystickY>");
// are we pushing the joystick in any direction?
bool isInputPresent = Mathf.Abs(joyStickX) > deadZone || Mathf.Abs(joyStickY) > deadZone ;
if (isInputPresent )
{
if (WasHolding)
{
// if we're holding now and we were holding in the last frame,
// then have we held for long enough to activate the held input?
if (Time.time - holdStartTime > holdDelay)
{
// do the thing!
}
}
else
{
// We've just started holding so we can perform the initial action
holdStartTime = Time.time;
// do the thing!
}
}
else if (WasHolding)
{
// We were holding previously but not anymore so reset the held start
holdStartTime = float.MaxValue;
}
}
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
360 Trigger Pressing both Triggers at the same time 1 Answer
Gamecube Controller joystick axis does not work? 0 Answers
How do I listen for Input from joystick/buttons on a controller? 1 Answer
Problems with joystick / controller axes being 1/-1 "way too often" 1 Answer