Axis Double Tap (Unreal Engine 4)
2014-04-13
As I am working on implementing Unreal Tournament 2004 style movement for my little UT2014 challenge, I found a tricky bit to implement: capturing double tap on axis inputs.
The template projects in the Unreal Engine 4 use axis inputs for movement. This is done so that you can use a gamepad's analogue stick for movement. The tricky bit, in comparison to input actions, is that the axis fires each frame and you need to read out the value. The execution needs to trigger on the value rising over a threshold and not the execution tick.
This is about how you would integrate the AxisDoubleTap
. Since we want to
preserve "normal" movement the sequence splits out to the AddMovementInput
on the one side and the AxisDoubleTap
selector on the other. The
value AxisThreshold
(0.75) and DogeTimeout
(0.4) are variables that are
exposed on the Character, so that they can easily be tweaked later on.
As you can see, I have not yet implemented the doge, so for now we will just print "Doge Left" and "Doge Right".
The AxisDoubleTap
selector works in three stages. The first stage
(AxisSplit
) take the axis value and separates it into three execution pulses.
The Positive
pulse is when the value is above the threshold, the Negative
pulse is when the value is below the negative threshold and the Neutral
pulse when the value is between the positive and the negative thresholds.
The second stage is a flank trigger. That is the continuous execution pulse
is converted into one single pulse. This is done with the help of a DoOnce
node. The impulse is routed into the that node and only passes through once,
any further pulses are dropped. Only until the input goes back to neural,
the DoOnce
is reset and thus a new pulse will be let through.
The third stage is the DoubleTap
selector. This basically take the pulses
and only emits a pulse if two consecutive pulses came in.
The AxisSplit
is quite straight forward. Two chained Branch
nodes each
comparing the value to the threshold and the inverted threshold.
The DoubleTap
is basically implemented through a DoN
node. The DoN
lets
two execution pulses through, but the flowing Branch
only evaluates to true
when the second pulse is emitted. The Delay
is used to ensure that two pulses
come without too much delay. If the delay is completed it will reset the DoN
for a new round of impulses.
So you have it, once it is spelled out like this, it seems obvious.