c# jumping isn't consistent, please help
hey guys i've looked through the forums and can't anything to do with the problem i'm having.
basically i've created a 3D first person game. In my original player script i used an extra collider that was a trigger to detect if my player was grounded or not but i found it wasn't working on the platforms that i made. So i started searching for alternatives and found raycasting which looked more reliable and consistent with detecting whether or not i was grounded. I included it in my script and scrapped the original grounded check code and everything was great at first, the raycasting is doing a great job detecting if i'm grounded or not both on and off my platforms but its causing my jumping to be inconsistent... and i don't know why.
I haven't changed anything besides the ground check and for some reason my character is randomly jumping twice as high as before then its all of a sudden jumping fine then jumps high again. The inconsistency is what's bugging, i don't understand why i would be doing that.
If someone could please help me that would be amazing! :)
P.S. my Player only has a RigidBody attached to not a character controller (I dunno if that helps or not)
this is my player script: (the commented out code was my original grounded check)
using UnityEngine; using System.Collections;
public class FPSController : MonoBehaviour {
public float speed = 10f;
public float jump;
// public bool grounded = false; protected Collider coll;
void Start () {
Cursor.lockState = CursorLockMode.Locked;
coll = GetComponent<Collider> ();
}
public bool Grounded () {
return Physics.Raycast (transform.position, Vector3.down, coll.bounds.extents.y + 0.1f);
}
// Update is called once per frame
void FixedUpdate () {
float translation = Input.GetAxis ("Vertical") * speed;
float straffe = Input.GetAxis ("Horizontal") * speed;
translation *= Time.deltaTime;
straffe *= Time.deltaTime;
transform.Translate (straffe, 0, translation);
if (Input.GetKeyDown ("escape")) {
Cursor.lockState = CursorLockMode.None;
}
// if (!grounded && GetComponent().velocity.y == 0) { // grounded = true; // }
// if (Input.GetKeyDown(KeyCode.Space) && grounded == true) { // GetComponent().AddForce(transform.up*jump); // grounded = false; // }
if (Grounded () && Input.GetKeyDown(KeyCode.Space)) {
GetComponent<Rigidbody>().AddForce(transform.up*jump);
}
}
}
Your answer
Follow this Question
Related Questions
How can I move an object in the direction another object is facing. 1 Answer
Rigidbody Stop and jump 0 Answers
Bugging ragdoll 1 Answer
make rigidbody jump and maintain velocity 1 Answer
Jump Using Raycast. 0 Answers