Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 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 Jocelyn11 · May 22, 2015 at 03:47 PM · rigidbodytransform.positionbool

I'm trying to create a Flying bird and when you stop pressing up arrow you lose height when you start pressing again up arrow you return to your original height.

How can i do that? this is my code:

 void FixedUpdate (){ 
 if (isFlying && Input.GetKey (KeyCode.UpArrow)) {
  rigidbody.position.y = 1.0f; birdRB.MovePosition (bird.transform.position + (new Vector3 (0.0f, 0.0f, -move) Time.deltaTime)); 
 } else { 
 isFlying = false; birdRB.MovePosition (bird.transform.position += (new Vector3 (0.0f, -0.01f, -move) Time.deltaTime)); } 
 isFlying = true; 
 }
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 FortisVenaliter · May 22, 2015 at 04:04 PM

So, first, you should format your code properly so it's clear and readable. This is how it ought to look to make debugging easier:

 void FixedUpdate ()
 { 
     if (isFlying && Input.GetKey (KeyCode.UpArrow)) 
     {
         rigidbody.position.y = 1.0f; 
         birdRB.MovePosition (bird.transform.position + (new Vector3 (0.0f, 0.0f, -move) Time.deltaTime)); 
 
     } 
     else 
     { 
         isFlying = false; 
         birdRB.MovePosition (bird.transform.position += (new Vector3 (0.0f, -0.01f, -move) Time.deltaTime)); 
     } 
     isFlying = true; 
 }

Note how each code block is easily visible and each line is on it's own line.

Now that it's easy to read, let's take a look at what your algorithm is actually doing.

So, if the bird is flying and the up arrow is pressed, you attempt to set the position, then move it forward along the scene, correct? Two notes there: first, you're using two different rigidbody references (rigidbody and birdRB). Is that correct, or should you be using one? Second is that Vector3s are structs, so when they are class variables, you should not set a single element, but rather the whole structure, like so:

 rigidbody.position = new Vector3(rigidbody.position.x, 1.0f, rigidbody.position.z);

Next, if it's not flying OR if the up arrow is not pressed, it will not be flying, but will continue forward and start falling. However, isFlying is always set to true at the end of the function for some reason. I'm almost thinking you should remove the boolean isFlying completely at this point because it doesn't serve much purpose here.

The next thing I notice is that rather than simply adding the current position with "+", you are using "+=". Since that is in itself inside of a set position function, it will likely cause problems. You probably want to just use a regular "+".

Lastly, rigidbodies are for using physics and force, neither of which you're using with the manual moving of the position. Why are you using a rigidbody then? If you don't need it, don't include it.

Try looking into all that, and if you have further questions or problems, post a comment here and I'll try to help.

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

2 People are following this question.

avatar image avatar image

Related Questions

Two ways to calculate velocity without using Rigidbody, which one is more accurate? 1 Answer

Slow down invoke repeating/rigidbody.transform.position? 1 Answer

Managing collision with transform movement 0 Answers

Move Multiple Directions At Once (ex. forward and right) unity 3d 1 Answer

Rigidbody.MovePosition() is not working if transform.position is just changed 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