Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by Ejpj123 · Jul 01, 2016 at 04:30 PM · jumpgroundground detectionable

Able to jump in air? (Reward)

Hi, I am making a 2D game, and for some reason my player is able to jump while in the air. I don't want the player to. The player should only be able jump once, then able to jump again, when he lands on the GROUND. I am using the scripts from Unity Standard Assets, but edited some of them.

Here are the scripts that I think are relevant to my problem:

 using System;
 using UnityEngine;
 using System.Collections;
 using UnityEngine.SceneManagement;
 
 // Just in case so no "duplicate definition" stuff shows up
 namespace UnityStandardAssets.Copy._2D
 {
     public class PlatformerCharacter2D : MonoBehaviour
     {
         [SerializeField] private float m_MaxSpeed = 10f;                    // The fastest the player can travel in the x axis.
         [SerializeField] private float m_JumpForce = 400f;                  // Amount of force added when the player jumps.
         [SerializeField] private bool m_AirControl = false;                 // Whether or not a player can steer while jumping;
         [SerializeField] private LayerMask m_WhatIsGround;                  // A mask determining what is ground to the character
 
         private Transform m_GroundCheck;    // A position marking where to check if the player is grounded.
         const float k_GroundedRadius = .2f; // Radius of the overlap circle to determine if grounded
         public bool m_Grounded;            // Whether or not the player is grounded.
         private Animator m_Anim;            // Reference to the player's animator component.
         private Rigidbody2D m_Rigidbody2D;
         private bool m_FacingRight = true;
         public string GameOverScene;
         // For determining which way the player is currently facing.
 
         private void Awake()
         {
             // Setting up references.
             m_GroundCheck = transform.Find("GroundCheck");
             m_Anim = GetComponent<Animator>();
             m_Rigidbody2D = GetComponent<Rigidbody2D>();
         }
 
 
         private void FixedUpdate()
         {
             m_Grounded = true;
             // The player is grounded if a circlecast to the groundcheck position hits anything designated as ground
             // This can be done using layers instead but Sample Assets will not overwrite your project settings.
             Collider2D[] colliders = Physics2D.OverlapCircleAll(m_GroundCheck.position, k_GroundedRadius, m_WhatIsGround);
             for (int i = 0; i < colliders.Length; i++)
             {
                 if (colliders[i].gameObject != gameObject)
                     m_Grounded = true;
             }
             m_Anim.SetBool("Ground", m_Grounded);
         }
 
 
         public void Move(float move, bool jump)
         {
             //only control the player if grounded or airControl is turned on
             if (m_Grounded || m_AirControl)
             {
                 // The Speed animator parameter is set to the absolute value of the horizontal input.
                 m_Anim.SetFloat("Speed", Mathf.Abs(move));
 
                 // Move the character
                 m_Rigidbody2D.velocity = new Vector2(move*m_MaxSpeed, m_Rigidbody2D.velocity.y);
 
                 m_MaxSpeed += 0.5f * Time.deltaTime; /////////////////////////////////////////////////////////////////////////////////
 
                 m_JumpForce += 1.0f * Time.deltaTime; ////////////////////////////////////////////////////////////////////////////////
 
                 m_Rigidbody2D.gravityScale += 0.009f * Time.deltaTime; /////////////////////////////////////////////////////////////
 
 
                 // If the input is moving the player right and the player is facing left...
                 if (move > 0 && !m_FacingRight)
                 {
                     // ... flip the player.
                     Flip();
                 }
                     // Otherwise if the input is moving the player left and the player is facing right...
                 else if (move < 0 && m_FacingRight)
                 {
                     // ... flip the player.
                     Flip();
                 }
             }
             // If the player should jump...
             if (m_Grounded = true && jump && m_Anim.GetBool("Ground"))
             {
                 // Add a vertical force to the player.
                 m_Anim.SetBool("Ground", false);
                 m_Rigidbody2D.AddForce(new Vector2(0f, m_JumpForce));
             }
         }
 
 
         private void Flip()
         {
             // Switch the way the player is labelled as facing.
             m_FacingRight = !m_FacingRight;
 
             // Multiply the player's x local scale by -1.
             Vector3 theScale = transform.localScale;
             theScale.x *= -1;
             transform.localScale = theScale;
         }
 
         void OnCollisionEnter2D(Collision2D target)
         {
             if (target.gameObject.tag == "Enemy") {
                 m_MaxSpeed = 0f;
                 m_JumpForce = 0f;
                 m_Rigidbody2D.gravityScale = 20f;
 
 
 
             }
     }
 
 
         IEnumerator DelayedSceneLoad()
         {
             yield return new WaitForSeconds(1.5f);
             SceneManager.LoadScene(GameOverScene);
 
         }
 
 
 }
 
 
 }



 using UnityEngine;
 using UnityStandardAssets.CrossPlatformInput;
 
 // Just in case so no "duplicate definition" stuff shows up
 namespace UnityStandardAssets.Copy._2D
 {
     [RequireComponent(typeof (PlatformerCharacter2D))]
     public class Platformer2DUserControl : MonoBehaviour
     {
         private PlatformerCharacter2D m_Character;
         private bool m_Jump;
 
 
         private void Awake()
         {
             m_Character = GetComponent<PlatformerCharacter2D>();
         }
         
         private void Update()
         {
             if (!m_Jump)
             {
                 // Read the jump input in Update so button presses aren't missed.
                 m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
             }
         }
         
         private void FixedUpdate()
         {
             float h = CrossPlatformInputManager.GetAxis("Horizontal");
             // Pass all parameters to the character control script.
             m_Character.Move(h, m_Jump);
             m_Jump = false;
         }
     }
 }


Anyone that helps will be rewarded with karma/reputation points, just to be nice. :)

Comment
Add comment
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Tianara · Jul 01, 2016 at 04:45 PM

Hey. I believe, that line is the problem.

 private void FixedUpdate()
 {
     m_Grounded = true;
     ...
 }

You indicate that your character is grounded on every update, which means he can jump at any time, isn't that the case?

Found another possible problem. That place:

          if (m_Grounded = true && jump && m_Anim.GetBool("Ground"))
          {
              // Add a vertical force to the player.
              m_Anim.SetBool("Ground", false);
              m_Rigidbody2D.AddForce(new Vector2(0f, m_JumpForce));
          }

Try setting

          m_Grounded = false;

Right after the comment. If it doesn't work, it's probably due to the fact a character is registered as landed after a jump, before he could get far away from the ground. If you will reduce the k_GroundedRadius constant, you could check if that's the case.

Comment
Add comment · Show 9 · 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
avatar image Ejpj123 · Jul 01, 2016 at 05:05 PM 0
Share

@Tianara I took away the line of code, and also tried setting it to false, but nothing happened.

avatar image Ejpj123 · Jul 01, 2016 at 06:25 PM 0
Share

Hm. So far nothing. Should I add lines of code, or take away?

avatar image Ejpj123 · Jul 01, 2016 at 06:35 PM 0
Share

@Cherno @Aggerwal @duck @3dmodler @wojtask12 @UsmanAbbasi @tanoshimi @Johat @Ga$$anonymous$$g Dudester @RealityStudio @Glurth @gsaccone101 @Dog Gamer @Roxzy @beechnova @$$anonymous$$D_Reptile @rokmarko @SolAZDev @Ali hatem

Could anyone one of you guys help me? I'm giving out karma/reputation points for anyone who helps.

avatar image Ejpj123 · Jul 01, 2016 at 06:36 PM 0
Share

@Tianara I will give you points now. Thank you for trying to help. Any more ideas are appreciated.

avatar image Tianara Ejpj123 · Jul 01, 2016 at 09:20 PM 0
Share

@Ejpj123 Can you send me your project file? I will figure it out tomorrow.

avatar image Ejpj123 Tianara · Jul 01, 2016 at 11:42 PM 0
Share

@Tianara ok, should I do through dropbox, or what? Either way, I will give to you by probably tomorrow, sorry. So you could maybe figure it out the next day.

Show more comments
avatar image Ejpj123 · Jul 02, 2016 at 04:24 PM 0
Share

@Tianara I'll send to you through dropbox, give me your email, and i'll send it in a compressed file.

avatar image Tianara Ejpj123 · Jul 02, 2016 at 08:59 PM 0
Share

kos94ok@gmail.com

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

59 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How Can I get a bool depending on which instance of the same Game Object i am sitting on ? 0 Answers

Ground check doesnt work 0 Answers

I need help with grounding. 1 Answer

Checking if the player jumps while not grounded 0 Answers

Character stops jumping after entering new "ground" platform 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