- Home /
Falling through platforms
I have a terrain which I can walk on, and I have a few boxes around and platforms to test my |FPS characters motion skills. When I run into a box or platform from the side, I collide with it, like I should, but when I jump ontop of the box or platform, i immediately teleport back to the ground. Any ideas on how to fix this? Here is the motion portion of my controller.
function FixedUpdate() { if (grounded) { // We are grounded, so recalculate movedirection directly from axes. moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection);
//left shift changes speed to sprintspeed.
if (Input.GetButton ("left shift")) { moveDirection = sprintspeed; } //left control changes speed to crouchspeed and modifies scale and position to a smaller size to crouch. else if (Input.GetButton ("left ctrl")) { moveDirection = crouchspeed; gameObject.transform.localScale.y -= .5; gameObject.transform.position.y = .5; }
else
{ //if anything else, speed is normal speed and make scale and position standing moveDirection *= speed; gameObject.transform.localScale.y = 1; gameObject.transform.position.y = 1; } //if jump is pressed, jump. if (Input.GetButton ("Jump")) { moveDirection.y = jumpSpeed; }
}
This script doesn't give enough detail on the problem - something else is happening that is not included here. When you jump, you set the moveDirection.y = jumpSpeed, but do you not change gounded? I can only imagine something is setting grounded when you don't want it to or you are setting the position to something which you don't want. When you are grounded and not holding shift, the object's transform.position.y is set to 1 or .5 in s$$anonymous$$d of the top of your box or whatever so either you're not grounded or you shouldn't set your position this way.
How do you have the triggers set up on your platform's colliders? There needs to be two, on set to trigger, and one not set to trigger so the player can actually 'stand' on the platform. I do this by putting a box collider on the platform itself and setting that to trigger, then I put a box gameobject inside of the platform as child that is not set to trigger for the player to step on. the child box object needs to smaller than the plaform's trigger box, so the player can touch the platform and be grounded on it.
Answer by Fabkins · Nov 06, 2011 at 01:25 AM
"gameObject.transform.position.y = 1;"
This line and the corresponding crouch will constantly reset the players Y position. So you could jump, which tells the motion controller to start incrementing the Y but you keep reseting the Y co-ordinate of the player. I would expect your player to have issues with anything that isnt a flat surface.
Your answer
Follow this Question
Related Questions
Collision and character controllers 0 Answers
No slipping off edges with Character Controller 0 Answers
Make Character Controller a Box? 2 Answers
Player falls through fast moving platform 1 Answer
Character Collision Issue 1 Answer