19-11-2020, 02:41 PM
(This post was last modified: 19-11-2020, 02:43 PM by canerozdemir.)
(19-11-2020, 02:25 PM)josemendez Wrote: Well, you're writing the collider name to console once per contact, no wonder performance goes down the drain . Writing to the console is extremely slow.
Remove the print() line and it should run acceptably fast.
Edit: also, you're using the second index of the contact (which for particle-particle contacts, is a particle index) to access the collider handles array, which will result in an out of bounds exception.
I wasn't paying attention to the documentation, I believe. I wasn't being careful, because I thought it would work like CollisionStay callback but I forgot that I am actually calling for a particle collision which is very expensive considering that I have over 4000 particles on the scene This code actually does what I want:
Code:
private void Solver_OnParticleCollision(object sender, ObiSolver.ObiCollisionEventArgs e)
{
var world = ObiColliderWorld.GetInstance();
foreach (var contact in e.contacts)
{
// this one is an actual collision:
if (contact.distance < 0.01)
{
var pa = _solver.particleToActor[contact.particle];
var po = _solver.particleToActor[contact.other];
if (pa.actor.gameObject != po.actor.gameObject)
{
Debug.Log(pa.actor.gameObject.name + " collides with: " + po.actor.gameObject.name);
}
}
}
}
I can now receive an information about who collides with whom. Therefore, I can now detect when a rope is colliding with another one and I can use it to expand the gameplay further. Thank you for putting out the obvious that I was missing out .