19-11-2020, 02:25 PM
(This post was last modified: 19-11-2020, 02:29 PM by josemendez.)
(19-11-2020, 02:24 PM)canerozdemir Wrote: Oh, I missed that one. However, the outcome is still the same. FPS drop happens and the game becomes unplayable. This is the code:
Code:public class RopeCollision : MonoBehaviour
{
private ObiSolver _solver;
private ObiSolver.ObiCollisionEventArgs _collisionEvent;
private void Awake()
{
_solver = GetComponent<ObiSolver>();
}
private void OnEnable ()
{
_solver.OnParticleCollision += Solver_OnParticleCollision;
}
private void OnDisable()
{
_solver.OnParticleCollision -= Solver_OnParticleCollision;
}
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 theCollider = world.colliderHandles[contact.other].owner;
if (theCollider)
{
print(theCollider.name);
}
}
}
}
}
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.