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
0
Question by JumpyMcLumpy · Aug 06, 2018 at 07:29 AM · collisionphysicsrigidbodynormalsforces

How can I simulate a short-distance attraction between RigidBodies A and B, with the mutual pull always being between the center of A and the closest point in B's collision mesh?

I need some help figuring out how I can create a force that will pull two RigidBodies together, with the direction of that force always being between the center of a "main" Rigidbody (let's call it C) and the closest point of any collision mesh in relation to that center (let's call that one P).


The ideal would be for the whole thing to rely on a "main" RigidBody that will be acting on any other RigidBody it gets close to, by getting attracted to the closest point of any collision mesh in range. However, instead of being pulled towards the center of the other RigidBody or the center of the closest face, it is pulled towards P. Similarly, but more complicated, the other RigidBody gets pulled at P instead of its center of mass, which would create torque if not aligned with the RigidBody's center of mass.

When using simple collision meshes, this effect could be simplified to the main Rigid Body being pulled towards the closest face, parallel with that face's normal, while the target RigidBody also gets pulled along that normal.

alt text

It would also be nice to disable this attraction if the RigidBodies are colliding, as to prevent phantom forces. I'm not really sure how Unity calculates its collisions, but from what I can observe, when two RigidBodies are intersecting, a repellent force is projected for as long as they are overlapping, and a force seems to be created along the normal for as long as they are colliding, as it is possible to spin a RigidBody through uncentered collisions.

alt text

This leads me to believe that what I want is kind of the opposite of a normal collision: A force of attraction that only exist when there is no collision, does not pull a RigidBody by its center of mass and is parallel to the normal of the pulling point.

This is supposed to be a short-distance attraction, though, so the force should decay with distance, being rounded to zero after it gets small enough (maybe the point in which that happens could be used to define a limit for all these calculations in order to make it more efficient?). The attraction being between C and P is also very important for the desired behavior, since with changes in the direction of P in relation to C, an orbiting behavior would arise, shall the main RigidBody be too fast to come in contact with the target.

alt text

The ideal would be for this to apply to any RigidBody without the need of listing them in the code beforehand, with the main RigidBody being the only one trully named in code. If needed, the whole torque thing can be ditched, having the target RigidBodies simply be pulled along the normal of P.

I know this must be extremely complex and I don't even know where to start, but I know it must be somehow possible. I'm sure there will probably be some raycasting involved, but I have no idea on how I would make it find P.

Any help is extremely appreciated.

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

0 Replies

· Add your reply
  • Sort: 

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

196 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

Related Questions

How to make two colliders or rigidbodies stick together upon collision, as if there was a glue on their surfaces? 3 Answers

Change bounciness at runtime 1 Answer

Can you tell when an Interactive Cloth is colliding with another object? 1 Answer

Rigidbodies won't collide if mass difference is too high 0 Answers

Character Controller meets Rigidbody 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