Accessing Rigidbody2D inspector info in code.
I'm working on an educational app that will help students visualize the forces acting on objects by drawing a continuously updating free-body diagram on-screen. At the moment, I'm working on drawing normal and friction forces.
If you look at a GameObject with a Rigidbody2D component in the inspector, there's a tab called info at the bottom. Inside that is another tab called Contacts, which lists all of the current contacts with other colliders, including information on the impulse that prevented clipping. I need to access the impulseNormal in those contacts.
Things I've tried:
Rigidbody2D.GetContacts(ContactPoint2D[]) - this doesn't turn up anything useful. During FixedUpdate, the Physics system resolved collisions last update, and hasn't begun preliminary movement for the next physics step (FixedUpdate runs before the internal physics loop). As a result, this only returns contacts if we're actively overlapping something. Which we're not, unless internal physics failed to fully resolve a prior collision. This doesn't work consistently.
OnCollisionStay2D - Another dead end. Again, the physics loop has already resolved collisions to the best of its ability, which means that even if we get a contact, it's a 0-penetration one, so the impulseNormal is not correct.
Does anyone know how I can grab the contact data displayed in the inspector?
Answer by MelvMay · Apr 19, 2018 at 02:12 PM
One way is to use yield WaitForFixedUpdate in a coroutine at which point all the fixed-update has finished as per: Execution Order
Perhaps a better option is to turn off Physics2D.autoSimulation and perform a manual simulation using Physics2D.Simulate(). That way, you control the point at which the simulation occurs and you can immediately afterwards retrieve contacts etc.
Your answer
Follow this Question
Related Questions
Player Movement and SurfaceEffector2D 0 Answers
RigidBody.MovePosition won't stop even after reaching the destination 0 Answers
Had to turn off gravity scale, but now player goes through walls 0 Answers
Rigidbody2D and non-trigger child colliders! 2 Answers
Manually created gravity too powerful 0 Answers