Input.GetButtonDown is giving me intermittent results. It seems to be working about 80% of the time I am pressing the button down. Is there a way I can improve the checking rate? Here's the code I have written thus far: (I wrote this code myself so I am pretty sure it's something I have done to cause this to not work.)
class GroundMovement
{
//var enabled = true;//NYI
var fMinMoveSpeed: float = 5;
var fMaxMoveSpeed: float = 8;
var fCurMoveSpeed: float = 5;
var fAcc: float = .1;// Acceleration
var bButtonHeld: boolean = false;
var gravity = 640;
}
class AirMovement
{
//var enabled = true;//NYI
var bJumpDown: boolean = false;
var bJumping: boolean = false;
//var iAirJumpTotal: int = 0;// NYI how many in air jumps con char perform
//var iAirJumpsUsed: int = 0;//NYI
var fMinJumpSpeed: float = 5;
var fCurJumpSpeed: float = 9;
var fMaxJumpSpeed: float = 10;
var fJumpAcc: float = .1; // Acceleration
var fMinFallSpeed: float = 5;
var fCurFallSpeed: float = 5;
var fMaxFallSpeed: float = 10;
var fFallAcc: float = .1;
var iHorStyle: int = 1;
var fJumpMaxTime: float = .25;// Max time key can be held
@System.NonSerialized var fJumpCurTime: float = 0;
}
var pOneButtons = new Array("P1Horizontal","P1Vertical","P1Jump","P1Fire");
var pTwoButtons = new Array("P2Horizontal","P2Vertical","P2Jump","P2Fire");
var pPlayerController = new Array(pOneButtons, pTwoButtons);
var iPlayerNumber: int = 0;// which player is using this script
var playerControl: boolean = true;// is the player in control
var gMove : GroundMovement;// an instance of our class
var aMove : AirMovement;// an instance of our class
private var moveDirection = Vector3.zero;
function Update ()
{
if(playerControl == true)
{
SetMovement();// Checks status of buttons.
}
}
function SetMovement()
{
var controller: CharacterController = transform.GetComponent(CharacterController);
moveDirection = Vector3.zero;// resets the move which will happen in all cases
if(controller.isGrounded)
{
resetAirMove();// Reset JumpSpeed and FallSpeed
groundMove();
moveDirection.y -= gMove.gravity* Time.deltaTime;// applying gravity
}
else // He's in the air!
{
airMove();
}
controller.Move(moveDirection * Time.deltaTime);// moving hero time!
}
function groundMove()
{
if(Input.GetButton(pPlayerController[iPlayerNumber][0]) == true)// Horizontal Movement
{
moveDirection = Vector3(Input.GetAxis(pPlayerController[iPlayerNumber][0]),0,0);//Set direction of the move
moveDirection = transform.TransformDirection(moveDirection);// make position relative to our transform.
moveDirection *= gMove.fCurMoveSpeed;// Add speed to our move
if(gMove.fCurMoveSpeed <= gMove.fMaxMoveSpeed)
{
gMove.fCurMoveSpeed += gMove.fAcc;
}
if(gMove.fCurMoveSpeed > gMove.fMaxMoveSpeed)
{
gMove.fCurMoveSpeed = gMove.fMaxMoveSpeed;
}
}
if(Input.GetButtonUp(pPlayerController[iPlayerNumber][0]) == true)// Horizontal Button is Released
{
gMove.fCurMoveSpeed = gMove.fMinMoveSpeed;
}
if(Input.GetButtonDown(pPlayerController[iPlayerNumber][2]) == true)// Jumping Button is pressed
{
aMove.bJumping = true;
moveDirection.y += aMove.fCurJumpSpeed;
aMove.fJumpCurTime = aMove.fJumpMaxTime;
}
}
function airMove()
{
//AIR MOVE HORIZONTAL
if(Input.GetButton(pPlayerController[iPlayerNumber][0]) == true)// Horizontal Movement
{
if(aMove.iHorStyle == 1)
{
moveDirection = Vector3(Input.GetAxis(pPlayerController[iPlayerNumber][0]),0,0);//Set direction of the move
moveDirection = transform.TransformDirection(moveDirection);// make position relative to our transform.
moveDirection *= gMove.fCurMoveSpeed;// Add speed to our move
}
else if(aMove.iHorStyle == 2)
{
moveDirection = Vector3(Input.GetAxis(pPlayerController[iPlayerNumber][0]),0,0);//Set direction of the move
moveDirection = transform.TransformDirection(moveDirection);// make position relative to our transform.
moveDirection *= gMove.fCurMoveSpeed;// Add speed to our move
if(gMove.fCurMoveSpeed <= gMove.fMaxMoveSpeed)
{
gMove.fCurMoveSpeed += gMove.fAcc;
}
if(gMove.fCurMoveSpeed > gMove.fMaxMoveSpeed)
{
gMove.fCurMoveSpeed = gMove.fMaxMoveSpeed;
}
}
}
// AIR MOVE VERTICAL
if(aMove.bJumping == true)
{
jumping();
}
else // He's Falling
{
falling();
}
}
function falling()
{
moveDirection.y = aMove.fCurFallSpeed;// Set the changes to the target y dir.
aMove.fCurFallSpeed -= aMove.fFallAcc;// Decrease Speed as he jumps upward.
if(aMove.fCurFallSpeed > aMove.fMaxFallSpeed)// if Faster than fastest FallSpeed
{
aMove.fCurFallSpeed = aMove.fMaxFallSpeed;
}
if(aMove.fCurFallSpeed < aMove.fMinFallSpeed)// if Faster than fastest FallSpeed
{
aMove.fCurFallSpeed = aMove.fMinFallSpeed;
}
}
function jumping()
{
if(Input.GetButton(pPlayerController[iPlayerNumber][2]) == true)// Jumping Button is held
{
if(aMove.fJumpCurTime > 0)
{
moveDirection.y += aMove.fCurJumpSpeed;// Set the changes to the target y dir.
aMove.fCurJumpSpeed -= aMove.fJumpAcc;// Decrease Speed as he jumps upward.
if(aMove.fCurJumpSpeed < aMove.fMinJumpSpeed)// if slower than slowest JumpSpeed
{
aMove.fCurJumpSpeed = aMove.fMinJumpSpeed;
}
aMove.fJumpCurTime -= Time.deltaTime;
if(aMove.fJumpCurTime < 0)
{
aMove.bJumping = false;
}
}
}
else // Jumping Button is released
{
aMove.bJumping = false;
}
}
function resetAirMove()
{
aMove.bJumping = false;
aMove.fCurJumpSpeed = aMove.fMaxJumpSpeed;//Jump starts fast and slows down.
aMove.fCurFallSpeed = aMove.fMaxFallSpeed;//Fall Starts slow and speeds up.
aMove.fJumpCurTime = 0;
}