Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
2
Question by animeman0 · Jun 16, 2015 at 05:42 AM · c#programminggravityjumpunity 4.6

How to check if your character is falling 2D - C#

Hello, just come to ask if anyone knows how to check to see if my GameObject (character) is falling?

 using UnityEngine;
 using System.Collections;
 
 public class Movement : MonoBehaviour {
 
     public float speed = 6.0f;
 
     public float jumpSpeed = 20f;
 
     bool grounded, interact; //bool for checking if player is grounded so they can jump, and bool for interact, so that player can only interact when in range of thing to interact with
 
     public Transform jumpCheck, interactCheck; //transform variable for the end points of the linecasts
 
     RaycastHit2D interacted; //a variable type that stores a collider that was hit during linecast
 
     float jumpTime, jumpDelay = .5f; //jumpTime = 0 by default
 
     bool jumped;
 
 
     Animator anim;
 
     void Start()
     {
         anim = GetComponent<Animator> ();
     }
 
     void Update()
     {
         PlayerController ();
         RaycastStuff(); //call the function every frame
     }
     
     void RaycastStuff()
     {
         //Just a debug visual representation of the Linecast, can only see this in scene view! Doesn't actually do anything!
         Debug.DrawLine(transform.position, jumpCheck.position, Color.magenta);
         Debug.DrawLine(transform.position, interactCheck.position, Color.magenta);
 
         //we assign the bool 'ground' with a linecast, that returns true or false when the end of line 'jumpCheck' touches the ground
         grounded = Physics2D.Linecast(transform.position, jumpCheck.position, 1 << LayerMask.NameToLayer("background")); 
     }
 
     void PlayerController()
     {
         anim.SetFloat("speed", Mathf.Abs(Input.GetAxis ("Horizontal"))); //setting the float parameter called "speed" depending on the input from the horizontal axis
 
         if(Input.GetAxisRaw("Horizontal") > 0) // if d or right key is pressed
         {
             transform.Translate(Vector3.right * speed * Time.deltaTime); //move right 4 pixels at a fixed framerate
             transform.eulerAngles = new Vector2 (0,0);
         }
         if(Input.GetAxisRaw("Horizontal") < 0) //if a or left key is pressed
         {
             transform.Translate(Vector3.right * speed * Time.deltaTime);
             transform.eulerAngles= new Vector2(0,180); //rotates gameobject by 180 degrees horizontally
         }
         if (Input.GetKeyDown (KeyCode.W) && grounded == true) // If the jump button is pressed and the player is grounded then the player jumps
         {
             rigidbody2D.AddForce(Vector2.up * 200f);
             jumpTime = jumpDelay;
             anim.SetTrigger ("Jump");
             jumped = true;
         }
         jumpTime -= Time.deltaTime; //counts down in seconds
         if (jumpTime <= 0 && grounded && jumped)
         {
             anim.SetTrigger ("Land");
             jumped = false;
         }
     }
 }

Thanks in advance

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Guppie1337 · Jun 16, 2015 at 11:42 AM 0
Share

If you mean by checking if the player is on the descent of his jump, you can calculate the y position. This can include all cases where your y might change depending on rising platforms and such. If you know how high your player jumps, you can calculate from that. Otherwise you need to store in a number of different values and do a number of different checks.

 Update ()
 {
   //Store a position from the moment the player jumps.
   float jumpStart = transform.position.y;
 
   //If your player has a fixed jump height of 5 units.
   float jumpApex = jumpStart + 4.9f;
 
   if (transform.position.y > jumpApex)
   {
     //Sort of safe to assume the player is falling now.
     playerFalling = true;
   }
 }

I would think this is a fairly simple way to do it.

1 Reply

· Add your reply
  • Sort: 
avatar image
4

Answer by Shark-Boy · Jun 16, 2015 at 04:02 PM

You could check the the velocity of your rigidbody2d.

 if (rigidbody2D.velocity.y < -0.1)
 {
    isFalling = true;
 }
 else
 {
    isFalling = false;
 }

This will cover not only jumping and then falling but falling off of a platform as well. If you just want to check if it is falling after a jump then use this.

 if (rigidbody2D.velocity.y < -0.1 && jumped)
  {
     isFalling = true;
  }
  else
  {
     isFalling = false;
  }
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

How do make player balloon inflate and float upwards? 1 Answer

Apply gravity to my character through script. 0 Answers

Can someone help me please. error CS1519 1 Answer

Jump and run on a circle (2D) 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges