Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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
1
Question by Hiyek · Nov 29, 2017 at 10:03 PM · c#rigidbodyvelocitybeginnerfriction

[RESOLVED! :D][C#] Friction/Deceleration - Compiler won't let me damp individual Rigidbody axes to 0. Force in opposite direction maybe?


Trying to add friction/deceleration to my rigidbody (rb) movement code when no input is received from the player. I run into a problem at this part:


 rb.velocity.x = Mathf.SmoothDamp(rb.velocity.x, 0, ref decelVelx, moveDecel);
 rb.velocity.z = Mathf.SmoothDamp(rb.velocity.z, 0, ref decelVelz, moveDecel);



It won't compile because I can't set the velocity of the rigidbody axes directly. I've tried storing the velocity in a new Vector, but it doesn't do anything. I've also tried invoking a force in the opposite direction of the current velocity (I don't have the exact code from that iteration, but IIRC, it was something like this):

rb.AddRelativeForce(-rb.velocity.x,0,-rb.velocity.z);

but then my character moves in a circle whenever you let go of any movement buttons.


Any thoughts on how to fix this?


Comment
Add comment · Show 4
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 Hiyek · Nov 29, 2017 at 10:23 PM 0
Share

Edit: Getting the opposite force thing to work over a smoothed rate would actually work a lot better for my game, but I'll take either for now. Bonus points if you can help with both solutions ;)

avatar image Hellium · Nov 29, 2017 at 10:23 PM 2
Share

When you say "I've tried storing the velocity in a new Vector, but it doesn't do anything", what code have you used ? Try:

  Vector3 velocity = new Vector3(
      $$anonymous$$athf.SmoothDamp(rb.velocity.x, 0, ref decelVelx, moveDecel),
      rb.velocity.y,
      $$anonymous$$athf.SmoothDamp(rb.velocity.z, 0, ref decelVelz, moveDecel)
  );
  rb.velocity = velocity ;

avatar image Hiyek Hellium · Nov 29, 2017 at 10:33 PM 0
Share

$$anonymous$$an, when I saw that you commented, I was sure you'd hit me with the right answer; but it's not working, sadly :( No point in even telling you what I've tried as far as storing in a new vector because your code is way more sound and it still isn't working for me! Not for naught, though, as your code example taught me something new that I never thought of: that I can store $$anonymous$$ath functions – and other functions that return a value – as a vector coord! A+ as always; this particular example just didn't work for me (it compiles fine, just doesn't decelerate my rigidbody character; it still feels like I'm running on ice).

avatar image Hiyek Hiyek · Nov 29, 2017 at 10:35 PM 0
Share

Side note: this code supposedly works in js. It's just the fact that I can't implicitly set the values of the inidividual rigidbody.velocity axes in C# that's the issue.

2 Replies

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

Answer by Hellium · Nov 29, 2017 at 10:43 PM

After reading the doc, I learned that Mathf.SmoothDamp changes the value of the 3rd parameter. Give the following a try :

   float velocityX = rb.velocity.x ;
   float velocityZ = rb.velocity.z ;
   Mathf.SmoothDamp(rb.position.x, 0, ref velocityX, moveDecel);
   Mathf.SmoothDamp(rb.position.z, 0, ref velocityZ, moveDecel);
   rb.velocity = new Vector3( velocityX, 0, velocityZ ) ;

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 Hiyek · Nov 29, 2017 at 10:53 PM 0
Share

Had to change rb.position (I was like "what the hell" when I kept reorienting to the origin when I stopped moving; it was pretty funny :p) to rb.velocity – which I'm sure was just a slip on your part – but it works!! Thanks again dude, you wanna just code this game for me? Haha if you wanna add your code in a comment, I'll accept it as the answer yet again! You're f***in awesome.

avatar image Hellium Hiyek · Nov 29, 2017 at 11:00 PM 1
Share

The first parameter of the $$anonymous$$athf.SmoothDamp seemed to require the position (according to the documentation). But if you get the desired result when passing rb.velocity, it's all good!

Glad I'm able to help you! Good luck for your game :)

avatar image Hiyek Hellium · Nov 29, 2017 at 11:10 PM 0
Share

Hmm very interesting. I thought the first parameter was the initial value, and the second was the desired/target value. Whatever works, eh? ( He says as he prays that this doesn't come back to bite him in the ass down the road )

avatar image
1

Answer by Buckslice · Nov 29, 2017 at 10:26 PM

You can set a rigidbody velocity directly with a Vector3 like so

 Vector3 v = new Vector3(1,0,0);
 rb.velocity = v;

Heres a relevant thread as well

I personally would just do something like this

 rb.drag = noInputs ? 2.0f : 0.0f;

or

 rb.velocity = rb.velocity * 0.98f;   // in FixedUpdate()
Comment
Add comment · Show 6 · 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 Hiyek · Nov 29, 2017 at 10:45 PM 0
Share

The only issue is that it would stop too abruptly rather than by a variable rate I can adjust if I did the first method (and I can't mess with drag based on what I plan to do with my game; it'll get really wonky, really fast). I've already tried something similar and then doing (using your example) something like:

 Vector3 v = new Vector3(0,0,0);
 v.x = $$anonymous$$athf.SmoothDamp(rb.velocity.x, 0, ref decelVelx, moveDecel);
 v.z = $$anonymous$$athf.SmoothDamp(rb.velocity.z, 0, ref decelVelz, moveDecel);
 rb.velocity = v;

..which compiles, but doesn't affect movement.

avatar image megabrobro · Nov 29, 2017 at 10:49 PM 1
Share

You can just do: rb.veloicty = new Vector3(rbvelocity.x -= deAccel, etc, etc);

avatar image Hiyek megabrobro · Nov 29, 2017 at 10:57 PM 1
Share

thank you for that gem as well mega!

avatar image megabrobro Hiyek · Nov 30, 2017 at 03:38 PM 1
Share

No probs dude. I was learning it all a few months ago :P

Show more comments
avatar image Hiyek · Nov 29, 2017 at 10:55 PM 1
Share

Oh, and thank you for your input, Buckslice! Greatly appreciated! :) The issue has been resolved in the OP comment thread!

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

427 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Strange/Buggy code behavier 1 Answer

My sphere loses velocity when jumping 2 Answers

Object shattering under a certain weight/force 3 Answers

relativeVelocity how to? (noob question) 2 Answers

Objects stop, but then pass through eachother, Rigidbody2D 0 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