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 /
  • Help Room /
avatar image
0
Question by YardGnomeNinja · Jul 20, 2020 at 03:43 AM · charactercontrollergravityjumping

Odd behavior using CharacterController.isGrounded for jumping

I'm at a loss for what's wrong here. Using this tutorial as the basis: https://www.youtube.com/watch?v=-nS1gqSk458

Which references this script: https://docs.unity3d.com/ScriptReference/CharacterController.Move.html


I'm using the "new input system" and I'm trying to add a "Jump" feature.


The problem I'm running into is similar to that in these posts:
https://forum.unity.com/threads/grounded.66133/#post-575193
https://forum.unity.com/threads/controller-isgrounded-doesnt-work-reliably.91436/


Ultimately, these posts state that using "playerVelocity.y = 0" when "CharacterController.isGrounded" will not provide the desired results. As I understand it, you have to keep a small amount of gravity pushing the object "into the ground" which will get pushed out automatically because of the colliders.


Now my experience is, I can move around fine, and I can jump... sometimes. Sometimes it's a little hop, sometimes it's the full jump, and still sometimes nothing at all.


Here is my player controller script. Any advice would be greatly appreciated.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.InputSystem;
 
 public class player : MonoBehaviour
 {
     private CharacterController controller;
     private Vector3 playerVelocity;
     private bool groundedPlayer;
     public float playerSpeed = 2.0f;
     private float jumpHeight = 1.0f;
     private float gravityValue = -9.81f;
     float moveX;
     float moveY;
     float moveZ;
 
     private void Start()
     {
         controller = GetComponent<CharacterController>();
     }
 
     public void OnJump(InputValue value)
     {
         if (controller.isGrounded) {
             // Debug.Log("-----");
             // Debug.Log($"jump start {playerVelocity.y}");
             playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);
             // Debug.Log($"jump to {playerVelocity.y}");
         }
     }
 
     public void OnMove(InputValue value)
     {
         moveX = 0f;
         moveZ = 0f;
 
         var movementInput = value.Get<Vector2>();
 
         moveX = movementInput.x;
         moveZ = movementInput.y;
     }
 
     void Update()
     {
          if (controller.isGrounded)
         {
             playerVelocity.y += 0.001f;
         } else {
              playerVelocity.y += gravityValue * Time.deltaTime;
         }
 
         Vector3 move = new Vector3(moveX, 0, moveZ);
         controller.Move(move * Time.deltaTime * playerSpeed);
 
         if (move != Vector3.zero)
         {
             gameObject.transform.forward = move;
         }
 
         controller.Move(playerVelocity * Time.deltaTime);
     }
 }











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

Answer by YardGnomeNinja · Jul 20, 2020 at 09:55 PM

If anyone comes across this post, here's the working code.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.InputSystem;
 
 public class player : MonoBehaviour
 {
     private CharacterController controller;
     private Vector3 playerVelocity;
     private bool groundedPlayer;
     public float playerSpeed = 2.0f;
     private float jumpHeight = 1.0f;
     private float gravityValue = -9.81f;
     float moveX;
     float moveY;
     float moveZ;
 
     private void Start()
     {
         controller = GetComponent<CharacterController>();
     }
 
     public void OnJump(InputValue value)
     {
         if (controller.isGrounded) {
             playerVelocity.y = Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);
         }
     }
 
     public void OnMove(InputValue value)
     {
         moveX = 0f;
         moveZ = 0f;
 
         var movementInput = value.Get<Vector2>();
 
         moveX = movementInput.x;
         moveZ = movementInput.y;
     }
 
     void Update()
     {
         if (controller.isGrounded && playerVelocity.y < 0)
         {
             playerVelocity.y = gravityValue * Time.deltaTime;
         }
         else
         {
             playerVelocity.y += gravityValue * Time.deltaTime;
         }
 
         Vector3 move = new Vector3(moveX, 0, moveZ);
         controller.Move(move * Time.deltaTime * playerSpeed);
 
         if (move != Vector3.zero)
         {
             gameObject.transform.forward = move;
         }
 
         controller.Move(playerVelocity * Time.deltaTime);
     }
 }
 

Ultimately, in order to make it work checking the key input outside of Update, the Move script needed to have this instead...

      if (controller.isGrounded && playerVelocity.y < 0)
      {
          playerVelocity.y = gravityValue * Time.deltaTime;
      }
      else
      {
          playerVelocity.y += gravityValue * Time.deltaTime;
      }

Once I did that, everything... fell into place.

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

229 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 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 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 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

Sluggish Gravity with Character Controller 0 Answers

CharacterController doesn't jump properly while moving into platform 0 Answers

Unity Character Falls Slowly 0 Answers

My character's axes are rotated when I get out of vehicle 0 Answers

Hold the jump button to jump higher with CharacterController 1 Answer


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