- Home /
The "GetButtonDown Version" of GetAxis for Analog Sticks
I'm working on a fighting game that uses both the directional arrows and the left analog stick of the PS3 controller. To use commands like quarter-turns ("hadokens") and such, I need GetButtonDown for the d-pad axes so that the code takes effect only as soon as the button is pressed. I have no idea how to do the same for the analog. Here's what I have right now:
if(Input.GetButtonDown("HorizontalD1")){
Alarm4 = 0.01;
}
if(Input.GetButtonDown("VerticalD1")){
Alarm4 = 0.01;
}
if(Input.GetAxisRaw("HorizontalA1")){
Alarm4 = 0.01;
}
if(Input.GetAxisRaw("VerticalA1")){
Alarm4 = 0.01;
}
"A1" stands for "Analog for Player1", "D1" stands for "D-Pad for Player1".
I used GetAxisRaw for the analog control, but I know that doesn't work the same as GetButtonDown. -_-' Does anyone know what I can do here? Thanks in advance!
If you check GetAxisRaw
once per frame, keeping the last frame's value as a reference, couldn't you just check for a sudden change in value?
Rough concept:
var axisValue = Input.GetAxisRaw("SomeAxis");
var axisChange = axisValue - lastFrameAxisValue;
if ($$anonymous$$athf.Abs(axisChange) > 0.5) {
//axis changed; do something
}
lastFrameAxisValue = axisValue;
I kind of see where you're going here, but how would your find "lastFrameAxisValue"? When I type it down, it displays as an error.
If i understand you correctly, you want to know if analog is pulled to somewhere?
Then you could for example use booleans for this.
And also to store the last frame axis value you can add that axis to some private float variable in the LateUpdate()
But to the C# example:
private float lastFrameHAxis;
private bool hAxisLeft;
private bool hAxisRight;
// as we know, axis returns 0 if its on its default position
// we can then check the axis if its not 0
if(Input.GetAxisRaw("HorizontalA1") != 0)
{
//Then we should check which direction(negative or positive)
if(Input.GetAxisRaw("HorizontalA1") > 0)
hAxisRight = true;
else
hAxisRight = false;
if(Input.GetAxisRaw("HorizontalA1") < 0)
hAxisLeft = true;
else
hAxisLeft = false;
}
// LateUpdate is called after all Update functions have been called
void LateUpdate()
{
lastFrameHAxis = Input.GetAxisRaw("HorizontalA1");
}
That is something similiar i did for my axis input system
I hope this helps you to go onward
It makes sense to me. I'll try converting it to Java and give it a shot. Thanks!