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 Sarcoex · May 14, 2013 at 05:34 PM · c#vector3navigationpathfollowingcalculation

Object slows down when moving to a NavPoint, speed is not constant

The update position code:

private void updatePos() { monsterPos = monster.transform.position;

if (rotateTowards != null) { rotateTowards.objectToRotate = monster.transform;
rotateTowards.target = nextNavPoint.transform; }

dir = nextNavPoint.transform.position - monsterPos;

monster.transform.Translate(dir speed Time.deltaTime, Space.World); }

I guess there is something on this line I need to change:

monster.transform.Translate(dir * speed * Time.deltaTime, Space.World);

Or this line:

dir = nextNavPoint.transform.position - monsterPos;

I am unsure which line I need to change/update, and I don't know what needs to be changed for the speed to be constant. I guess it has something to do with the;

dir * speed * Time.deltaTime
, when
dir
is less than
Vector3(1, 1, 1)

Any help would be appricated. :)

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
1
Best Answer

Answer by hoy_smallfry · May 14, 2013 at 05:37 PM

The closer you are getting to the target, your direction variable dir is getting closer and closer to zero vector (0, 0, 0). This will happen because the intent is to make monsterPos equal to nextNavPoint.transform.position; the closer monsterPos gets to being equal to nextNavPoint.transform.position, the closer dir is equal to nextNavPoint.transform.position - nextNavPoint.transform.position, which is zero vector. Because this increasingly smaller dir value is being used to caculate your translation, your velocity, which is "direction * speed", slows down.

The solution is to normalize your direction vector to a unit vector with Vector3.Normalize() before you use it to translate. Normalizing will keep your vector at unit size (magnitude of 1) always, no matter what magnitude dir originally was. Though, the movement will be rigid and constant this way.

[1]: http://en.wikipedia.org/wiki/Magnitude_(mathematics)#Euclidean_vectors

Comment
Add comment · Show 2 · 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 Sarcoex · May 14, 2013 at 05:59 PM 0
Share

Adding dir.Normalize(); before monster.transform.Translate(dir speed Time.deltaTime, Space.World); solved the problem. Thank you so very much for the quick reply. :)

avatar image hoy_smallfry · May 14, 2013 at 06:01 PM 0
Share

I've converted your answer to a comment :)

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

14 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

Related Questions

wired calculation I don't get it 30-30 = 1.907349E-06 2 Answers

Movement and animation 1 Answer

Prefab Position 2 Answers

Angle Between vectors in Navigation Mesh 1 Answer

Moving an object along a circular path 3 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