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 DoctorMoney · Mar 04, 2013 at 09:27 PM · movementjumpingplatformer

Can't control movement while jumping

I'm very new to Unity and I've been trying to learn it all day but I can't seem to get my character to move while he's in the air. I'm trying to make a simple 3D platformer, simpler than the tutorial one in the asset store so I don't want to use that as a reference.

I know the isGrounded statement is in there but when i take that out or seperate it so it tests for when the controller is not grounded, the jumping turns into a small hop and slowly falls down.

 var speed : float = 6.0;
 var jumpSpeed : float = 8.0;
 var gravity : float = 20.0;
 private var moveDirection : Vector3 = Vector3.zero;
 function Update() {
     var controller : CharacterController = GetComponent(CharacterController);
     
     if (controller.isGrounded) {
         // We are grounded, so recalculate
         // move direction directly from axes
 
         moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
         moveDirection = transform.TransformDirection(moveDirection);
         moveDirection *= speed;
 
         if (Input.GetButton ("Jump")) {
             moveDirection.y = jumpSpeed;
         }
     }
     // Apply gravity
     moveDirection.y -= gravity * Time.deltaTime;
     
     // Move the controller
     controller.Move(moveDirection * Time.deltaTime);
 }
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 Professor Snake · Mar 04, 2013 at 10:52 PM 0
Share

Actually, the isGrounded statement does not affect movement. It just prevents the player from jumping again while in the air.

1 Reply

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

Answer by LunaArgenteus · Mar 04, 2013 at 11:11 PM

Start by moving these lines:

     moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
     moveDirection = transform.TransformDirection(moveDirection);
     moveDirection *= speed;

to just above your check to see if the controller is grounded. This will allow moveDirection to be affected by your horizontal input regardless of whether you are grounded or not.

However, you'll also need to add a variable to keep track of the Y velocity as you adjust your move direction - in the code you've posted, since you can't move in the air, it's not an issue that you set the Y component of moveDirection to 0 every update that you're on the ground, but you don't want to be resetting your Y velocity to 0 every update.

Something like what's below should do the trick.

 var yVel : float = moveDirection.y;
 
 moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
 moveDirection = transform.TransformDirection(moveDirection);
 moveDirection *= speed;
 
 moveDirection += (Vector3.up * yVel);
Comment
Add comment · Show 4 · 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 DoctorMoney · Mar 04, 2013 at 11:24 PM 0
Share

Still won't work. I can get it to move in the air if I separate the isGrounded movement with one in an "else" statement so it can move in the air but can't jump, but it will always set the y position to 0 ins$$anonymous$$d of making it jump.

 function Update() {
     var controller : CharacterController = GetComponent(CharacterController);
  
     if (controller.isGrounded) {
         // We are grounded, so recalculate
         // move direction directly from axes
  
         moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
         moveDirection = transform.TransformDirection(moveDirection);
         moveDirection *= speed;
  
         if (Input.GetButton ("Jump")) {
             moveDirection.y = jumpSpeed;
         }
     }
     else
     {
         moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, 0);
         moveDirection = transform.TransformDirection(moveDirection);
         moveDirection *= speed;
     }
avatar image LunaArgenteus · Mar 04, 2013 at 11:48 PM 0
Share

The reason for that is explained in the second part of my answer: you're resetting the Y component of moveDirection to zero (no vertical movement) when you set the movementDirection. To get around this, you NEED to set up an extra variable to keep track of the y component before you reset it (an example of which is also in my original answer). Also, you don't need an if else if you are executing the same code in both cases - just move the common code to before the if statement, much like kramcomposer below has done.

avatar image DoctorMoney · Mar 05, 2013 at 12:10 AM 0
Share

Thank you, for some reason it didn't work before lol. The help is much appreciated

avatar image LunaArgenteus · Mar 05, 2013 at 12:11 AM 0
Share

No problem, glad I could help.

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

13 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

Related Questions

How do I create variable Jump Height for a platformer? 1 Answer

How to check if object is on ground (C#)? 1 Answer

isGrounded is always false, even with gravity, how do you fix that? 1 Answer

Character on a moving platform slows down 1 Answer

Player Character looses jump height the further right they go 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