I have a ball rolling across the screen and I want it to jump everytime the “Fire1” button is clicked. This only occurs once or twice per number of clicks, where I need it to work everytime.
As far as I can see, there’s nothing wrong, but it’s late so I might be overlooking something so any help would be appreciated.
Here is my code:
public class platform : MonoBehaviour
{
public Rigidbody target;
public int force = 250;
public float speed = 0.1f;
public int jumpHeight = 6;
public bool isFalling = false;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
if(Input.GetKeyDown(KeyCode.R))
{
Application.LoadLevel(0);
}
}
// Update is called once per frame
void FixedUpdate ()
{
ballMovements ();
}
void ballMovements()
{
rigidbody.AddRelativeTorque(Vector3.right * -1 * speed);
if(Input.GetButtonDown("Fire1") && isFalling == false)
{
Debug.Log ("clicked");
Vector3 temp = rigidbody.velocity;
temp.y = jumpHeight;
rigidbody.velocity = temp;
}
isFalling = true;
}
void OnCollisionStay()
{
isFalling = false;
}
}
You should not be taking user input during FixedUpdate().
Take inputs in Update().
Input.GetButtonDown() only returns true during the frame the button was pressed, so if FixedUpdate() occurred on any frames other than when the button was pressed, it will be false. Which is why your jump “sometimes” works.
Update() occurs every frame so that’s why you should take inputs in Update().