• 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 Zhinkk · Jun 05, 2013 at 05:49 PM · proceduraltranslatetransform.translate

Testing x value when using transform.translate

I have a cube which I move using transform.Translate like this:

 transform.Translate(rate * Time.deltaTime,0,0);

I want to detect when x is a exactly specific value (for example, 10) but doing this doesn't work:

         float x = -cube.transform.position.x;   //using negative value because cube is going backwards on x-axis
         if(x == 10){
             Debug.Log("x is 10!"); //This text does not show in Console
         }

I'm guessing this doesn't work because it is going so fast that it can't exactly detect when x is 10. What options do I have here? I'm doing this for procedural generation.

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

2 Replies

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

Answer by Eric5h5 · Jun 05, 2013 at 06:13 PM

It will never be exactly 10.0 regardless of how fast it's going due to Time.deltaTime, and floating point imprecision. You can detect if it's greater than 10.0, or use Lerp instead of Translate.

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 Zhinkk · Jun 07, 2013 at 06:14 PM 0
Share

Thanks for the help guys. For anyone interested, I just used a different method of spawning obstacles procedurally. Ins$$anonymous$$d of detecting when x was, for example, 10, and spawning an object at that position, I just set a starting spawn position (spawnPosX) and added a value of spawnRate to it every time the next object would spawn. I know this is confusing, but I just wanted to post how I did it. If anyone has any questions, please ask!

             if(numSpawned < 14){
                 obToSpawn(); //This just selects a random object to spawn and sets it to the variable nextObj
                 Instantiate(nextObj, new Vector3(-spawnPosX, 0, 0), Quaternion.identity);
                 spawnPosX += spawnRate;
                 numSpawned++;
             }
avatar image
0

Answer by darthbator · Jun 05, 2013 at 06:19 PM

Floats are never going to be accurate like that. As said in the other answer you can act on >= or you can use Mathf.Approximately

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 Eric5h5 · Jun 05, 2013 at 06:26 PM 0
Share

$$anonymous$$athf.Approximately won't be nearly approximate enough for this. It's for values that are very close to the one you're testing, which won't be the case here.

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

16 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

Related Questions

instantiating transform.translate in the wrong position? 1 Answer

How to stop transform.Translate instantly ? 1 Answer

Removing The Slide From Transform.Translate 1 Answer

transform.Translate not working after exporting to Android 2 Answers

Move terrain towards object? (illusion of moving forward) 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