- Home /
 
Rigidbody2d not falling once in the air
Hi all,
I am currently learning how to create a 2d game using the new 2d feaures that came with 4.3. I have a script which allows the character to move left and right, and also to jump (well kind of). The problem is, is that once the character is in mid-air; it does not fall....instead just stays at whatever position it got to.
Here is the script I am using:
 using UnityEngine;
 using System.Collections;
 
 public class PlayerController : MonoBehaviour
 {
     private Transform groundCheck;            // A position marking where to check if the player is grounded.
     private Animator animator;
     private bool grounded = false;            // Whether or not the player is grounded.
     public bool jump = false;
     float vertSpeed = 0.0f;
     float gravity = 20.0f;
     private int jumpHeight = 500;
     
     // Use this for initialization
     void Start()
     {
         groundCheck = transform.Find("groundCheck");
         animator = this.GetComponent<Animator>();
     }
 
     // Update is called once per frame
     void Update()
     {
         // The player is grounded if a linecast to the groundcheck position hits anything on the ground layer.
         grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
         //if (Input.GetAxis("Vertical") > 0.0f && grounded)
             //jump = true;
         if(Input.GetButtonDown("Jump") && grounded)
             jump = true;
         
     }
 
     void FixedUpdate()
     {
         var vertical = Input.GetAxis("Vertical");
         var horizontal = Input.GetAxis("Horizontal");
         float h = Input.GetAxis("Horizontal");
         
         if (Input.GetAxis("Horizontal") > 0.0f)
         {
             animator.SetInteger("Direction", 0);
             rigidbody2D.AddForce(Vector2.right * h * 120);
             //rigidbody2D.AddForce(transform.forward * 100);
         }
         
         if (Input.GetAxis("Horizontal") < 0.0f)
         {
             animator.SetInteger("Direction", 1);
             rigidbody2D.AddForce(Vector2.right * -120);
         }
         if (Input.GetAxis ("Vertical") > 0.0f)
         {
             rigidbody2D.AddForce(Vector2.up * vertical * 500);
 
         }
 
     }
 
 }
 
               And here is a screenshot of how my character is set up:

Thanks,
Callum
In addition, when I set the gravity to higher than 0; my character just floats up perpetually forever?
Answer by KellyThomas · Jan 18, 2014 at 01:48 PM
Use the inspector to set gravity scale to a non-zero value.
I have tried this, but what happens is my character just floats up ; it does not stop then fall?
Please see the docs, it should be used as a multiplier to the gravity defined in the Physics 2D $$anonymous$$anager.
I have sorted it now, I needed to check the 'Animate Physics' on the animator, and also check 'Fixed Angle' on the rigodbody2d. Thanks for you help!
Your answer