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
0
Question by NutellaDaddy · May 26, 2014 at 02:19 AM · movementjumpingchoppy

A better way to do jumping?

I have a script that allows my player some basic movement with my gravity and I was going to ask if you guys had any better ways to do movement or jumping for a rigidbody. My jumping is really choppy and I can't jump when moving in any direction and after I try I can't jump any more. I would love some input or suggestions. Here's the script:

 using UnityEngine;
 using System.Collections;
 
 //
 //THIS SCRIPT CONTROLS THE MOVEMENT OF THE PLAYER 
 //
 [RequireComponent (typeof (Rigidbody))]
 public class PlayerMovement : MonoBehaviour 
 {
     //ALL OF THE PUBLIC VARIABLES
     public float walkSpeed = 8.0f;
     public float strafeSpeed = 7.5f;
     public float runSpeed = 11.0f;
     public float jumpForce = 8.0f;
 
     //ALL OF THE PRIVATE VARIABLES
     private Vector3 moveDirection;
     private float groundedDistance = 1.0f;
     private bool grounded;
 
     void Start () 
     {
         grounded = true;
     }
     void Update () 
     {
         moveDirection = new Vector3 (Input.GetAxisRaw ("Horizontal"), 0 , Input.GetAxisRaw ("Vertical")).normalized;
     }
     void FixedUpdate()
     {
         //CHECK TO SEE IF THE PLAYER IS GROUNDED OR NOT
         RaycastHit hit;
         Ray ray = new Ray(transform.position, -Vector3.up);
 
         if (Physics.Raycast (ray, out hit)) 
         {
             if(hit.distance - 0.5f <= groundedDistance)
             {
                 grounded = true;
             }
             else{
                 grounded = false;
             }
         }
 
         //THE SPEED OF THE PLAYER
         float speed = walkSpeed;
 
         //WALKING
         rigidbody.MovePosition (rigidbody.position + transform.TransformDirection(moveDirection) * speed * Time.deltaTime);
 
         //JUMPING
         if (Input.GetKeyUp (KeyCode.Space) && grounded == true)
         {
             rigidbody.AddForce (transform.up * jumpForce, ForceMode.Impulse);
         }
     }
 
 }
 
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 NutellaDaddy · May 26, 2014 at 04:31 AM 0
Share

bump bump

2 Replies

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

Answer by sickb0y247 · May 28, 2014 at 10:38 AM

 // IN UPDATE FUNCTION
 
 if ( character.isGrounded ){
     {    
          if (Input.GetKey(KeyCode.W))
             Jump();    
     }
 }
 
 if(jumped)
         velocity = Vector3.up * jumpSpeed;

 movement += velocity;    
 movement += Physics.gravity;
 movement *= Time.deltaTime;
 
 // Actually move the character    
 character.Move( movement );
 
 // EXTRA FUNCTIONS
 
 function Jump(){
     jumped = true;
     currentAnimation = "jump";
     
     Invoke("EndJump", jumpTime);
 }
 
 function EndJump(){
     jumped = false;
 }


this worked for me and lets you tweak your jump pretty easily to however you want it. jumpSpeed is actually more like jump power, how much he will be moving upward every update (keep in mind it's against the gravity). jumptime is how long the power will be added to the jump. Toy with these two and the gravity and you'll have a nice smooth (more unrealistic jump) if that's what you're going for. My jumpSpeed is 5 and my jumpTime is 1 with the gravity set to -3. My guy looks like he should be in the NBA ;)

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
avatar image
0

Answer by Darwin Mecharov · May 26, 2014 at 04:53 AM

Try changing Line 55 to Vector3.up instead of transform.up. After that, change your jump force to a higher value or you won't see much change, about 200 works for me.

EDIT: I don't get your timer much, but a simple coroutine timer works fine for me. Hope this helps:

 if(Input.GetKey(KeyCode.Space) && !jumped)
 {
     rigidbody.AddForce(Vector3.up * JumpHeight);
     jumped = true;
     Invoke("JumpDelayer", 1);
 }
 function JumpDelayer ()
 {
     jumped = 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
avatar image Darwin Mecharov · May 26, 2014 at 04:59 AM 0
Share

Tell me if you need a C# version of this.

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

21 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

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

Controlling direction while jumping using CharacterController 1 Answer

Player movement 0 Answers

Lerp & jumping with sin/cos 1 Answer

Character pass trought wall... 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