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 QC_Scott · Jan 21, 2014 at 10:42 PM · movementsprites2d-physics

How to make 2d movement in air but not on ground?

I am attempting to create a 2d sprite game where a mechanic is only been allowed to move when in the air and be immobilised on the ground. Here is my script so far:

public float speed = 6.0F;

public float jumpSpeed = 8.0F;

 public float gravity = 20.0F;

 private Vector3 moveDirection = Vector3.zero;
 
 void Update() {
     CharacterController controller = GetComponent<CharacterController>();
     // is the controller on the ground?
     if (controller.isGrounded) {
         //Feed moveDirection with input.
         moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
         moveDirection = transform.TransformDirection(moveDirection);
         //Multiply it by speed.
         moveDirection *= speed;
         //Jumping
         if (Input.GetButton("Jump"))
             moveDirection.y = jumpSpeed;
 
     }
     //Applying gravity to the controller
     moveDirection.y -= gravity * Time.deltaTime;
     //Making the character move
     controller.Move(moveDirection * Time.deltaTime);
 }

}

This immobilises movement on ground and allows me to jump but it won't let me move whilst in the air can someone explain to me how to edit my script so it allows movement in the air but keeps them still on the ground?

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 KellyThomas · Jan 21, 2014 at 10:45 PM

It looks like you are only processing player input while the character is on the ground:

 if (controller.isGrounded) {
         //Feed moveDirection with input.
         moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
         // ...
  }

If you want them control movement while in the air you will have to build logic that handles that circumstance.

Comment
Add comment · Show 3 · 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 QC_Scott · Jan 23, 2014 at 06:48 PM 0
Share

How can I create such a logic?

avatar image Armored13 · Jan 23, 2014 at 07:39 PM 1
Share

There are many ways to create such logic, but this is the way I personally find most useful: $$anonymous$$ake a small cube underneath the controller, sticking down just a little past the controller. $$anonymous$$ake it a trigger and a child of your controller. Put a script on the cube and have OnTriggerEnter() increase a counter by one. Have OnTriggerExit() decrease that counter. In your controller, you can now reference that cube. As long as that counter is 0 it means you're in the air, if it is positive you're grounded. The reason for the counter is in the situation that it is standing right in between multiple objects.

Other options, depending on the level design and complexity required in the game, could include: Shooting a ray downwards and seeing if anything is close enough. Shooting a spherecast or capsulecst downwards just like a ray. If you don't want him to move when butted up against a wall, you could use OnCollisionEnter or OnCollisionStay.

avatar image KellyThomas · Jan 23, 2014 at 11:04 PM 0
Share

@QC_Scot I think you will get a lot of value from the first half of this video.

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

20 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

Related Questions

Smooth movement using Rigidbody2d 3 Answers

2D environment manipulation 0 Answers

How to change the sprites in an animation? 1 Answer

Yet another 2D pixel perfect movement question 0 Answers

How to make only one directional button available at one time. 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