• 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
Question by VictoryX · Feb 26, 2013 at 07:50 PM · 2dmovementcharacterplatformerdouble jump

Another Double Jump Question

Trying to incorporate a double jump into some character movement code I found online. I just don't have the knowledge or skills to figure out how to do it. I've looked through other Double jump questions, but since the code is completely different from mine I really don't know how to work their solutions into my stuff. Here is my code below, hopefully someone can help me out, it would be greatly appreciated. Not sure which parts of the code are most important so I just put the whole script.

 var walkSpeed = 6.0;
 var runSpeed = 11.0;
  
 // If true, diagonal speed (when strafing + moving forward or back) can't exceed normal move speed; otherwise it's about 1.4 times faster
 var limitDiagonalSpeed = true;
  
 // If checked, the run key toggles between running and walking. Otherwise player runs if the key is held down and walks otherwise
 // There must be a button set up in the Input Manager called "Run"
 var toggleRun = false;
  
 var jumpSpeed = 8.0;
 var gravity = 20.0;
  
 // Units that player can fall before a falling damage function is run. To disable, type "infinity" in the inspector
 var fallingDamageThreshold = 10.0;
  
 // If the player ends up on a slope which is at least the Slope Limit as set on the character controller, then he will slide down
 var slideWhenOverSlopeLimit = false;
  
 // If checked and the player is on an object tagged "Slide", he will slide down it regardless of the slope limit
 var slideOnTaggedObjects = false;
  
 var slideSpeed = 12.0;
  
 // If checked, then the player can change direction while in the air
 var airControl = true;
  
 // Small amounts of this results in bumping when walking down slopes, but large amounts results in falling too fast
 var antiBumpFactor = .75;
  
 // Player must be grounded for at least this many physics frames before being able to jump again; set to 0 to allow bunny hopping 
 var antiBunnyHopFactor = 1;
 
 
 
  
 private var moveDirection = Vector3.zero;
 private var grounded = false;
 private var controller : CharacterController;
 private var myTransform : Transform;
 private var speed : float;
 private var hit : RaycastHit;
 private var fallStartLevel : float;
 private var falling = false;
 private var slideLimit : float;
 private var rayDistance : float;
 private var contactPoint : Vector3;
 private var playerControl = false;
 private var jumpTimer : int;
  
 function Start () {
     controller = GetComponent(CharacterController);
     myTransform = transform;
     speed = walkSpeed;
     rayDistance = controller.height * .5 + controller.radius;
     slideLimit = controller.slopeLimit - .1;
     jumpTimer = antiBunnyHopFactor;
     oldPos = transform.position;
 }
  
 function FixedUpdate() {
     var inputX = Input.GetAxis("Horizontal");
     
     // If both horizontal and vertical are used simultaneously, limit speed (if allowed), so the total doesn't exceed normal move speed
     var inputModifyFactor = (inputX != 0.0 != 0.0 && limitDiagonalSpeed)? .7071 : 1.0;
  
     if (grounded) {
         var sliding = false;
         // See if surface immediately below should be slid down. We use this normally rather than a ControllerColliderHit point,
         // because that interferes with step climbing amongst other annoyances
         if (Physics.Raycast(myTransform.position, -Vector3.up, hit, rayDistance)) {
             if (Vector3.Angle(hit.normal, Vector3.up) > slideLimit)
                 sliding = true;
         }
         // However, just raycasting straight down from the center can fail when on steep slopes
         // So if the above raycast didn't catch anything, raycast down from the stored ControllerColliderHit point instead
         else {
             Physics.Raycast(contactPoint + Vector3.up, -Vector3.up, hit);
             if (Vector3.Angle(hit.normal, Vector3.up) > slideLimit)
                 sliding = true;
         }
  
         // If we were falling, and we fell a vertical distance greater than the threshold, run a falling damage routine
         if (falling) {
             falling = false;
             if (myTransform.position.y < fallStartLevel - fallingDamageThreshold)
                 FallingDamageAlert (fallStartLevel - myTransform.position.y);
         }
  
         // If running isn't on a toggle, then use the appropriate speed depending on whether the run button is down
             if (!toggleRun) 
             speed = Input.GetButton("Run")? runSpeed : walkSpeed;
  
         // If sliding (and it's allowed), or if we're on an object tagged "Slide", get a vector pointing down the slope we're on
         if ( (sliding && slideWhenOverSlopeLimit) || (slideOnTaggedObjects && hit.collider.tag == "Slide") ) {
             var hitNormal = hit.normal;
             moveDirection = Vector3(hitNormal.x, -hitNormal.y, hitNormal.z);
             Vector3.OrthoNormalize (hitNormal, moveDirection);
             moveDirection *= slideSpeed;
             playerControl = false;
         }
         // Otherwise recalculate moveDirection directly from axes, adding a bit of -y to avoid bumping down inclines
         else {
             moveDirection = Vector3(inputX * inputModifyFactor, -antiBumpFactor);
             moveDirection = myTransform.TransformDirection(moveDirection) * speed;
             playerControl = true;
         }
  
         // Jump! But only if the jump button has been released and player has been grounded for a given number of frames
         
         
    
         
         if (!Input.GetButton("Jump"))
             jumpTimer++;
         else if (jumpTimer >= antiBunnyHopFactor) 
         {
             moveDirection.y = jumpSpeed;
             jumpTimer = 0;
             
         }
         
     
         
         
       
     }
     else {
         // If we stepped over a cliff or something, set the height at which we started falling
         if (!falling) {
             falling = true;
             fallStartLevel = myTransform.position.y;
         }
  
         // If air control is allowed, check movement but don't touch the y component
         if (airControl && playerControl) {
             moveDirection.x = inputX * speed * inputModifyFactor;
             
             moveDirection = myTransform.TransformDirection(moveDirection);
         }
     }
  
     // Apply gravity
     moveDirection.y -= gravity * Time.deltaTime;
  
     // Move the controller, and set grounded true or false depending on whether we're standing on something
     grounded = (controller.Move(moveDirection * Time.deltaTime) & CollisionFlags.Below) != 0;
     
     if(controller.transform.position.y < -10){
 
     controller.transform.position.x = -10;
     controller.transform.position.y = 0;
     controller.transform.position.z = 3.5;
     }
 }
  
 function Update () {
     // If the run button is set to toggle, then switch between walk/run speed. (We use Update for this...
     // FixedUpdate is a poor place to use GetButtonDown, since it doesn't necessarily run every frame and can miss the event)
     if (toggleRun && grounded && Input.GetButtonDown("Run"))
         speed = (speed == walkSpeed? runSpeed : walkSpeed);
 }
  
 // Store point that we're in contact with for use in FixedUpdate if needed
 function OnControllerColliderHit (hit : ControllerColliderHit) {
     contactPoint = hit.point;
 }
  
 // If falling damage occured, this is the place to do something about it. You can make the player
 // have hitpoints and remove some of them based on the distance fallen, add sound effects, etc.
 function FallingDamageAlert (fallDistance : float) {
     Debug.Log ("Ouch! Fell " + fallDistance + " units!");    
 }
 
Comment

People who like this

0 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 Lockstep · Jun 11, 2013 at 11:51 PM 0
Share

Frankly, UnityAnswers is not a place to beg for scripts. You simply posted a script, which you copied from somewhere and expect us to modify it at your liking. Finding out how to implement stuff is the main part of programming. We will help you if you are stuck but nobody will just write a script for you, if you didn't even try.

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

10 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

Related Questions

How to make my character stop stuttering when walking down a slope? 2 Answers

Rigidbody Platform Character Movement 0 Answers

2D Platformer Ai Movement Decision Making Problems 0 Answers

Why isn't my instance of an object moving? 1 Answer

Non-symmetrical Character walk left animation. 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