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
1
Question by Breckenridge119 · Nov 14, 2013 at 01:43 AM · c#jumpjumpingdoublejump

Multiple jump C# Script.

I am attempting to remake the game of Joust. For it I need to be able to jump more than once and when in the air. If someone could assists me that would be fantastic. Here is the code I have so far.

 using UnityEngine;
 using System.Collections;
 
 [RequireComponent(typeof(PlayerPhysics))]
 public class PlayerController : MonoBehaviour {
     
     // Player Handling
     public float gravity = 20;
     public float speed = 8;
     public float acceleration = 30;
     public float jumpHeight = 12;
     
     private float currentSpeed;
     private float targetSpeed;
     private Vector2 amountToMove;
     
     private PlayerPhysics playerPhysics;
     
 
     void Start () {
         playerPhysics = GetComponent<PlayerPhysics>();
     }
     
     void Update () {
         targetSpeed = Input.GetAxisRaw("Horizontal") * speed;
         currentSpeed = IncrementTowards(currentSpeed, targetSpeed,acceleration);
         
         if (playerPhysics.grounded) {
             amountToMove.y = 0;
             
             // Jump
             if (Input.GetButtonDown("Jump")) {
                 amountToMove.y = jumpHeight;    
             }
         }
         
         amountToMove.x = currentSpeed;
         amountToMove.y -= gravity * Time.deltaTime;
         playerPhysics.Move(amountToMove * Time.deltaTime);
     }
     
     // Increase n towards target by speed
     private float IncrementTowards(float n, float target, float a) {
         if (n == target) {
             return n;    
         }
         else {
             float dir = Mathf.Sign(target - n); // must n be increased or decreased to get closer to target
             n += a * Time.deltaTime * dir;
             return (dir == Mathf.Sign(target-n))? n: target; // if n has now passed target then return target, otherwise return n
         }
     }
 }
 
Comment
Add comment · Show 3
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 rutter · Nov 14, 2013 at 01:45 AM 0
Share

Is there a bug with it, right now, or are you looking for help managing the multi-jump in some way, like a max jump count?

avatar image Breckenridge119 · Nov 14, 2013 at 01:46 AM 0
Share

Looking for help managing the multi-jump. A jump count.

avatar image Breckenridge119 · Nov 14, 2013 at 01:47 AM 0
Share

$$anonymous$$ax jump count, jump manager.

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by rutter · Nov 14, 2013 at 01:55 AM

As you can probably imagine, we're going to need to change this bit:

    if (playerPhysics.grounded) {
      amountToMove.y = 0;
 
      // Jump
      if (Input.GetButtonDown("Jump")) {
       amountToMove.y = jumpHeight;    
      }
    }

First, we need to keep track of how many jumps the player has left. We can reset it each time they touch the ground.

Second, instead of restricting jumps based on touching the ground, we can restrict them based on the number of jumps remaining.

So, we could define some member variables for your class:

 const int MAX_JUMPS = 3;
 int jumpsLeft = MAX_JUMPS;

And then tweak your update code, something like this:

 //reset when player touches the ground
 if (playerPhysics.grounded) {
     jumpsLeft = MAX_JUMPS;
     amountToMove.y = 0;
 }

 //player can jump up to MAX_JUMP times between resets
 if (jumpsLeft > 0 && Input.GetButtonDown("Jump")) {
     amountToMove.y = jumpHeight;
     jumpsLeft -= 1;
 }

From there, you could add other features...

Do you want a cooldown on the jump? Track Time.time, track its current value against the timestamp when jump was last pressed.

Do you want to limit extra jumps to the "peak" of their current jump? The player's y-velocity will approach zero while they're at the top of the jump's parabola, so you can use Mathf.Abs(amountToMove.y) to see if it's below some small value.

You can always add sounds, visual effects, or other feedback, too.

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 Breckenridge119 · Nov 14, 2013 at 07:00 PM 0
Share

Afraid that didn't work for me. Could you possibly explain it more? I'm not really a programmer so I'm pretty new to C#

avatar image
0
Wiki

Answer by pelos · Jun 29, 2014 at 06:51 AM

since onCollisionStay might activate and then the RBD is to close will catch the onCollisionStay()

i change the code to use onCollisionStay, and onCollisionExit, and left a public variable so the user can control the amount of jumps

the first time you jump you start counting how many times you jumped, but for that you need to be grounded, click the jump for the secundary jumps you need to press the jump key, have at least one jump all ready and have less than the maximum.

when you toucht the ground the counter reset and you can start all over again.

the cool thing about this is that you can use the counter in another method to play difernet animations for each jump.

inside the update method you want to use the jump()

 void Update () 
     {
     jump ();
     //print (counter);
     }

 private int counter = 0;
 public int amountOfJumps = 3;
 private bool grounded = true;

 void jump()
     {
     if (grounded == true && Input.GetButtonDown("Jump") == true && amountOfJumps >= counter )
         {
         grounded = false;        
         counter += 1;
         rigidbody.velocity =  new Vector3 (0f, 10f, 0f);
         }

     if (Input.GetButtonDown ("Jump") == true && amountOfJumps >=counter &&counter >= 1)
         {
         counter += 1;
         rigidbody.velocity = new Vector3 (0f, 10f, 0f);
         }
     }


 void OnCollisionEnter ()
     {
     grounded = true;
     counter = 0;
     }
 void OnCollisionExist ()
     {
     grounded = false;
     }
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

19 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

Related Questions

Multiple jump C# Script. 0 Answers

jump with character controller best way? 1 Answer

Not able to jump 1 Answer

Can't figure out how to detect ground (2D) 1 Answer

Making player jump when left mouse clicked 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